iPhone SDK UIScrollView 移动后没有触摸事件

Posted

技术标签:

【中文标题】iPhone SDK UIScrollView 移动后没有触摸事件【英文标题】:iPhone SDK UIScrollView doesn't get touch events after moving it 【发布时间】:2010-04-12 10:14:44 【问题描述】:

我将 UIScrollView 子类化,并在开始时用一些项目填充这个 ShowsScrollView。填充后,我将 frame 和 contentSize 设置为此 ShowsScrollView。现在一切正常,我得到了触摸事件,滚动正在工作..

但在旋转到横向后,我更改了 ShowsScrollView 框架的 x 和 y 坐标,将其从下角移动到右上角。然后我调整它的大小(更改 ShowsScrollView 框架的宽度和高度)并重新排序此滚动中的项目。最后我设置了新的 contentSize。 现在我只在滚动视图的前 1/4 上获得触摸事件,滚动也只在滚动视图的 1/4 上起作用,但滚动滚动视图中的所有项目。 在所有操作之后我写了一个日志: NSLog(@"ViewController: setLandscape finished: size: %f, %f content: %f,%f",scrollView.frame.size.width,scrollView.frame.size.height, scrollView .contentSize.width, scrollView.contentSize.height);

值正确: ViewController:setLandscape 完成:大小:390.000000, 723.000000 内容:390.000000,950.000000

在旋转回纵向时,我将所有东西移动并调整大小,一切正常..

请帮忙!

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,并设法在更改滚动视图的框架后再次设置 self.view 的大小来使其正常工作。我不知道为什么会这样,但确实如此。

// Set the view's frame
if (UIDeviceOrientationIsLandscape(toOrientation)) 
 [self.view setSize:CGSizeMake(1024, 724)];
 else 
 [self.view setSize:CGSizeMake(768, 960)];


// Set scrollview frame
if (UIInterfaceOrientationIsLandscape(toOrientation)) 
 self.scrollView.frame = CGRectMake(0, 0, 100, 300);
 self.scrollView.contentSize = CGSizeMake(100, 600);

else 
 self.scrollView.frame = CGRectMake(0, 0, 300, 100);
 self.scrollView.contentSize = CGSizeMake(600, 100);


// Move your content around here

// Set the view's frame again
if (UIDeviceOrientationIsLandscape(toOrientation)) 
 [self.view setSize:CGSizeMake(1024, 724)];
 else 
 [self.view setSize:CGSizeMake(768, 960)];

【讨论】:

嗯,你是如何设置自动调整大小的属性的?现在我有默认的自动调整大小(顶部和左侧),并且在方法 didRotateFromInterfaceOrientation 我有: [self.view setSize:CGSizeMake(768,1004)]; scrollView.frame = CGRectMake(0, 584, 768, 420); // 计算并设置 scrollView 的内容大小 // 在 scrollView 中移动内容 [self.view setSize:CGSizeMake(768,1004)]; 1004 px 高度是因为我在底部有标签栏,女巫有 20 px 高度相同的结果!我还尝试禁用自动调整大小并用坐标为 0,0 的 setFrame 替换视图上的 setSize,但是我在顶部有很大的余量.. 我没有设置自动调整大小,所以我猜它是默认值。想不出我设置的其他任何东西可能会有所作为,希望你能成功!【参考方案2】:

您必须将scrollView 放在superView 前面,例如:

[self.view bringSubviewToFron:scrollView];

【讨论】:

以上是关于iPhone SDK UIScrollView 移动后没有触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone SDK 中使用 Objective C 实现 UIViewAutoresizingFlexibleHeight 到 UIScrollView?

iPhone SDK 用 2 根手指缩放/调整图像大小!!帮助

卸载部分安装的 XCode + iPhone SDK

View 生命周期中确定 UIScrollView 屏幕大小的最佳时间

UIScrollView - 将视图移到前面,但在滚动指示器下方

iphone- UIScrollview 对角线滑动意外行为