gpt4 book ai didi

iphone - UIView 范围外的用户交互

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:18:43 27 4
gpt4 key购买 nike

我正在尝试做的是“导航”到一个更大的 UIView,按钮和控件位于不同的位置。我已经使主 UIView 的大小比平时大两倍。它是 640x480 而不是 320x480。

单击屏幕第一部分中的按钮后,我在 x 方向上移动了 -320 像素,以显示屏幕的第二个“隐藏”部分,其他功能将向用户显示。除了我无法将 UIView 恢复到原始位置之外,一切都很完美。似乎我用来返回原始位置的按钮,即 320 像素的“边界之外”,不起作用。

我的 UIView 被引用为“introScreen”,下面是我调用的在 x 方向平移屏幕的函数:

- (void)secondPartOfTheScreen {

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.15];
introScreen.transform = CGAffineTransformMakeTranslation(-320, 0);
[UIView commitAnimations];

}

调用这个函数我的 UIView 移动正确,但是当我的按钮出现在屏幕的这一部分时,它没有得到任何用户交互。如果我在屏幕的第一部分移动那个按钮,它就可以正常工作。它与屏幕边界有关吗?有可能解决吗?

提前致谢!

最佳答案

您应该尝试子类化您的 UIView 并重写它的 pointInside:withEvent: 方法,以便它边界之外的点也被识别为属于 View 。否则, View 边界之外的用户交互不可能按照您希望的方式进行处理。

这就是Event Handling Guide说:

In hit-testing, a window calls hitTest:withEvent: on the top-most view of the view hierarchy; this method proceeds by recursively calling pointInside:withEvent: on each view in the view hierarchy that returns YES, proceeding down the hierarchy until it finds the subview within whose bounds the touch took place. That view becomes the hit-test view.

您可以在自定义 UIView 中使用类似这样的内容:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
for (UIView* view in self.subviews) {
if (view.userInteractionEnabled && [view pointInside:[self convertPoint:point toView:view] withEvent:event]) {
return YES;
}
}
return NO;
}

你可以这样做:

@interface MyView: UIView
@end

@implementation MyView

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
for (UIView* view in self.subviews) {
if (view.userInteractionEnabled && [view pointInside:[self convertPoint:point toView:view] withEvent:event]) {
return YES;
}
}
return NO;
}
@end

将此类定义添加到您正在使用 View 的 .m 文件的开头。 (您也可以使用单独的 .h/.m 文件,但为了测试是否一切正常,这就足够了)。然后,在当前 UIView 的实例化中将 UIView 替换为 MyView,它应该可以工作。

关于iphone - UIView 范围外的用户交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14162280/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com