【问题标题】:Weird behaviour of custom UIViews when touched触摸时自定义 UIView 的奇怪行为
【发布时间】: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}

【问题讨论】:

  • 我会把你的电话从viewDidLoaddidRotateFromInterfaceOrientation:移到adjustSubViewsadjustZoom,然后把它们都放在viewWillLayoutSubviews中——这将在设备旋转时和之后调用viewDidLoad。您可能还想在此处更新 Tile 对象的框架,而不是在 viewDidLoad 中设置它们。我不确定这是否能解决您的问题,但它可能有助于隔离问题。
  • 我还没有阅读 GitHub 上的代码。你如何移动你的瓷砖?

标签: ios iphone uiview uiscrollview touchesmoved


【解决方案1】:

因为包含 tile 的视图由其在旋转过程中改变其框架的超级视图(控制器的视图)自动调整大小,所以 tile 变得可拖动。

通过将平铺视图的自动调整大小掩码设置为UIViewAutoresizingNone(通过取消选择界面生成器中的所有弹簧和支柱),可以轻松避免这种行为。

注意调试视图大小问题的工具,如下所示:

  1. LLDB 命令po viewVariableOrAddress(调用其参数的description 方法并打印结果)。
  2. -[UIView recursiveDescription] 通过以下命令从 LLDB 调用:po [viewVariableOrAddress recursiveDescription]。请注意,他的方法是私有的,不得在生产代码中调用(否则应用程序将被拒绝)。
  3. Reveal — 在自然的 GUI 中,表示您可以在运行时在调试器控制台中获得的相同信息。

【讨论】:

猜你喜欢
  • 2011-03-23
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多