【发布时间】:2014-02-16 06:46:09
【问题描述】:
我正在尝试设置一个教程类型类,该类呈现一个覆盖视图并需要用户在继续之前执行操作。我目前的层次结构设置如下。
UIWindow
|---- UIViewController
| |---- UIViewA (View performing tutorial action on)
| |---- UIViewB
|
|---- UIViewT (tutorial overlay)
|---- CGRect (defined by UIViewA)
在教程过程中,视图会被拖拽,新视图会被创建等等,这就是为什么我将教程覆盖视图添加到 UIWindow。这样,我就不必像 SO 上的许多地方所建议的那样弄乱视图控制器中的视图层次结构。覆盖窗口的目的是阻止所有操作,教程预期的必需操作除外。
目前教程覆盖视图实现如下
@interface ZSOverlayView : UIView <UIGestureRecognizerDelegate>
@property (nonatomic, assign) CGRect activeRegion;
@end
@implementation ZSOverlayView
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
return !CGRectContainsPoint(_activeRegion, point);
}
@end
其中 activeRegion 是 UIViewA 定义的 CGRect。这成功地阻止了所有不需要的事件和手势,使其无法通过 activeRegion 之外的覆盖。在这种特定情况下,UIViewB 不会获取事件或手势。
问题在于,对于 UIViewA,我只想要一个手势,而不是所有手势。例如,如果 UIViewA 具有双击、平移和自定义手势,我可能只希望双击激活一次,或者自定义手势一次激活,或者两者兼而有之。本教程不知道视图有哪些手势,因此它需要一种通用的方式来传递所需的手势,并阻止那些没有的手势。目前没有任何手势被阻止。即使我已经设置了标志,我目前正在这样做,以确定哪些手势应该能够通过,但我仍然遇到了如何阻止特定手势并让其他手势通过的问题。
我不确定如何继续,因为教程覆盖不是任何手势识别器的委托,我也不希望它是,因为通过接管作为委托,教程可能会删除现有委托指定的特殊条件.
任何想法如何继续获得我正在寻找的功能?
【问题讨论】:
-
您能否澄清一下这种说法:“我也不希望它出现在由适当代表处理的特殊情况下”?
-
我更新了问题的结尾,希望现在更清楚了。
-
如果我理解正确,您可以设置 UIGestureRecognizerDelegates 然后在委托方法中使用条件来指定当手势视图是教程窗口与手势视图是主窗口时要做什么.
-
我花了很多时间研究不同的解决方案,但我从来没有想过那个。我很确定它会起作用,但我试图使本教程通用,而不是将它过多地集成到现有代码中。为了清楚起见,您是说在教程视图是手势视图时修改已经存在的代表以采取不同的行动?这是有效地做到这一点的唯一方法吗?
-
是的,这就是我要说的。除了修改现有的委托方法并添加这些条件之外,我不知道有任何其他方法。
标签: ios