我想知道以下问题如何尽可能地址:的iOS:在UI(子)UIGestureRecognisers处理视图
我有一个单一的视图控制器。它的视图包含大量复杂的子视图(UIView的子类)。由于这些UIViews的复杂性,初始化他们自己的UIGestureRecognisers并执行相应的目标操作。因为我想协调各种子视图的手势,所以我必须将单个ViewController设置为手势的代表。 对此有各种各样的可能性。
1)初始化在所述的viewController ALL手势(这会导致大规模的viewController)
2),其限定在UIVIews(getViewController一个协议),由所述的ViewController
@protocol CustomViewDelegate <NSObject>
@required
- (UIViewController *)getViewController;
@end
3实施)定制UIViews的init方法并使用ViewController作为选项。
- (id)initWithFrame:(CGRect)frame andViewController:(UIViewController *)vc;
解决此问题的最优雅的可能性是什么?在UIView对象内部实现目标动作可以吗?
感谢您的想法...
嗨汤米,感谢评论。有些东西我没有得到:当你写的时候,在特定的UIView类中抓住手势是很好的。因为我有很多这些类,所以我必须通过将手势委托给一个协调器(例如包含' - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeShultaneouslyWithGestureRecognizer:')来协调他们的手势。这应该是控制器还是应该使用新的类? – bumblebee
对于2)我的意思是以下。从UIView继承的每个类都有其协议,由相应的ViewController实现以协调手势。当这些类想要设置手势delegetae(用于协调手势)时,它们调用'[leftSwipeRecognizer setDelegate:[delegate getViewController]];'。这是通过所有继承自UIView并包含gestureRecognizer的Class完成的。 – bumblebee
我正在考虑一个UIScrollView。这捕获了大量的手势,包括轻扫,双击和捏,但显然它是所有这些人的代表,它以一些以视图为中心的方式处理它们,以影响平移和缩放,并仅将结果传递给其代表。因此,协调和过滤大量不同的手势会发生在最本地的视图中,委托人会通知结果。 – Tommy