UIScrollview 内容总是在顶部
Posted
技术标签:
【中文标题】UIScrollview 内容总是在顶部【英文标题】:UIScrollview contents always on top 【发布时间】:2011-10-07 21:03:33 【问题描述】:我正在尝试让我的UIScrollView
占据整个屏幕并在其中包含用户可以缩放、平移等的图像。这一切都有效。但是,当用户点击屏幕一次时,我希望在此UIScrollView
之上出现一个附加视图,其中包含有关图片的一些信息。问题是无论我做什么,UIScrollView
的子 ImageView 总是在最前面。我尝试更改 xib 中视图的顺序,我尝试使用 bringSubViewToFront
没有成功。这是代码:
- (void)viewDidLoad
[super viewDidLoad];
UITapGestureRecognizer *singleTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(flipViewSingleTap:)];
singleTapGesture.delegate = self;
self.flippedImage.userInteractionEnabled = YES;
[self.flippedImage addGestureRecognizer:singleTapGesture];
[singleTapGesture release];
self.flippedImageView.contentSize = CGSizeMake(1024, 768);
self.flippedImageView.delegate = self;
self.flippedMenuView.alpha = 0.0f;
- (IBAction)flipViewSingleTap:(UIGestureRecognizer *)sender
flipItemsVisible = !flipItemsVisible;
[self.view bringSubviewToFront:self.flippedMenuView];
[UIView animateWithDuration:0.5f
delay:0.0f
options:UIViewAnimationCurveEaseInOut
animations:^
self.flippedMenuView.alpha = flipItemsVisible ? 1.0f : 0.0f
completion:nil];
【问题讨论】:
【参考方案1】:也许将这一行添加到 viewDidLoad:
[self.view addSubview:self.flippedMenuView];
(假设 self.view 是 UIScrollView。)
【讨论】:
感谢您的建议,但这无济于事。如果我将 FlippedMenuView 添加为 UIScrollView 的子视图,如果用户放大,它会从屏幕上移开。我将其添加为顶部的单独视图的目的是使其在运动方面“静态”。跨度> 【参考方案2】:尝试添加忽略菜单视图的gestureRecognizer:shouldReceiveTouch:
委托方法。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldReceiveTouch:(UITouch *)touch
return ![touch.view isDescendantOfView:self.flippedMenuView];
【讨论】:
谢谢,但没有,这并没有改变任何东西。 如果添加NSLog(@"%@", touch.view);
(并尝试始终返回NO
然后YES
),您会看到什么? flippedView
和 flippedMenuView
视图子视图在同一个视图中吗?
我认为问题与触摸无关。即使我最初使 FlippedMenuView 可见,它总是被描绘在滚动图像的后面。
我知道这是旧的并且可能已解决,但 UIScrollView 已经附加了手势识别器并“捕获”某些触摸。上述答案将帮助您缩小解决方案的范围。我看到您已经注意到您需要打开交互才能获得积分。我现在正在处理滚动视图,它们与额外的子视图等有点复杂。文档中没有的烦人的东西【参考方案3】:
为图像视图打开 userInteraction 是不够的。 touchesMoved/Began 的默认方法是空白的(我认为)。
确保您自己的 UIImageView 自定义子类是 flippedImageView 是什么。覆盖这些方法并发送一个委托消息(自定义),其中包含“userTappedImageAt:”之类的内容。
如果您的子视图处理不会将任何东西放在前面,并且您的触摸工作正常,请抓住应用程序委托窗口 [[[UIApplication sharedApplication] 委托] 窗口] 并向其添加子视图,但这样做可能更安全使用视图,以便您可以使用 convertPoint: from/to 函数。
我告诉你的大部分内容都可以通过阅读视图和编程指南以及关于 SO 的问题以及关于获得视图的答案来推断。
您始终可以“滚动自己的”子视图以避免未知的 SDK 识别器。
祝你好运, 斯蒂芬
【讨论】:
以上是关于UIScrollview 内容总是在顶部的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 无法正常工作(它返回顶部并且不显示任何滚动条
IOS UIScrollView + UIButton 实现页面和顶部标签页水平滚动效果