- (voID)helpClicked{ CGRect visibleBounds = [self convertRect:[self bounds] toVIEw:vIEwContainer]; CGfloat minimumVisibleX = CGRectGetMinX(visibleBounds); UIImageVIEw * helpOverlay = [[UIImageVIEw alloc]initWithFrame:CGRectMake(minimumVisibleX,1024,768)]; UIImage * helpImage = [UIImage imagenamed:@"HelpOverLay.png"]; [helpOverlay setimage:helpImage]; helpOverlay.tag = 50; self.scrollEnabled = NO; [self addSubvIEw:helpOverlay]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissVIEw)];[self addGestureRecognizer:tap];
}}
在这里我把叠加关闭另一个视图。
- (voID) dismissVIEw{ UIVIEw *overlay = [self vIEwWithTag:50]; [overlay removeFromSupervIEw]; self.scrollEnabled = YES;}
我的问题是如何删除手势识别器在第二种方法?我不能把变量tap传递到这个方法,也不能删除它在上一个方法。任何指针?当涉及到事件时,Ive被卡住了很多传递变量的问题。
解决方法 从 WWDC 2015,Cocoa Touch Best Practices,建议你保留一个属性或iVar,如果你需要访问它以后,不要使用vIEwWithTag:。Moto:属性而不是标签
这可以避免一些麻烦:
>当处理多种手势时,您可以直接删除要访问该属性的手势,并删除它。 (不需要重复所有的视图的手势,以获得正确的一个被删除)
>在迭代时,通过标签查找正确的手势,当您在视图上有多个标签时,以及当与特定标签发生冲突时,这是非常具有误导性的
(i.e) You implemented it first time with Tags,and everything works
as expected. Later you work on another functionality which lets say
breaks this and causes undesired behavior that you don’t expect it. Log
doesn’t give you a warning,and the best thing you can get depending on the case it’s a crash signalizing unrecognized selector sent to instance. Sometimes you won’t get any of these.
解
声明iVar
@implementation YourController { UITapGestureRecognizer *tap;}
设置您的视图
- (voID) helpClicked { //Your customization code //Adding tap gesture tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissVIEw)]; [self addGestureRecognizer:tap];}
直接删除手势
- (voID) dismissVIEw { [self.vIEw removeGestureRecognizer:tap];}总结
以上是内存溢出为你收集整理的iphone – 如何清除手势识别器全部内容,希望文章能够帮你解决iphone – 如何清除手势识别器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)