【发布时间】:2014-03-09 16:40:47
【问题描述】:
在a (yet another) word game for iOS 中,我有一个滚动视图,其中包含一个带有游戏板的图像视图。
在下面我有代表字母图块的可拖动自定义视图。
对于滚动视图,我添加了一个双击手势识别器,用于切换其zoomScale(图像宽度在 50% 和 100% 之间):
这很好用,但我不得不禁用自动布局(否则滚动视图的contentOffset 会在我拖动图块时跳转到{0,0})。
所以我不得不将以下代码添加到ViewController.m 以在设备旋转后调整滚动视图的框架:
- (void) adjustSubViews
{
_scrollView.frame = CGRectMake(0,
0,
self.view.bounds.size.width,
self.view.bounds.size.height - kHeight - 2 * kPadding);
}
这似乎也有效 - 但我的问题是 在第一次设备旋转到横向和返回后“有些东西坏了”并且通过触摸它们下面的瓷砖突然可以拖动 :
请问为什么会这样?
下面是显示滚动视图属性的 Xcode 屏幕截图(此处为 fullscreen):
更新:我已将大小记录添加到 Tile.m:
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
NSLog(@"%s %@", __PRETTY_FUNCTION__, NSStringFromCGSize(self.frame.size));
[_smallImage setHidden:YES];
[_smallLetter setHidden:YES];
[_smallValue setHidden:YES];
[_bigImage setHidden:NO];
[_bigLetter setHidden:NO];
[_bigValue setHidden:NO];
[self.superview bringSubviewToFront:self];
}
虽然最初它记录了 45x45 的预期图块大小(由我在 Tile.xib 中设置):
-[Tile touchesBegan:withEvent:] {45, 45}
在我将设备旋转到横向并回到纵向后,我突然得到了 160 的高度:
-[Tile touchesBegan:withEvent:] {45, 160}
【问题讨论】:
-
我会把你的电话从
viewDidLoad和didRotateFromInterfaceOrientation:移到adjustSubViews和adjustZoom,然后把它们都放在viewWillLayoutSubviews中——这将在设备旋转时和之后调用viewDidLoad。您可能还想在此处更新Tile对象的框架,而不是在viewDidLoad中设置它们。我不确定这是否能解决您的问题,但它可能有助于隔离问题。 -
我还没有阅读 GitHub 上的代码。你如何移动你的瓷砖?
标签: ios iphone uiview uiscrollview touchesmoved