接触延迟开始
Posted
技术标签:
【中文标题】接触延迟开始【英文标题】:touchesBegan with delay 【发布时间】:2015-08-05 09:43:57 【问题描述】:我有一个UIView
的子类,并添加了touchesBegan
和touchesEnd
方法...
在touchesBegan
中,我使用self.backgroundColor = [UIColor greenColor]
将backgroundColor
从白色设置为绿色...在touchesEnd
中我将颜色重置为白色。
它可以工作,但速度很慢。通过点击视图,我需要 0.5 - 1.0 秒才能看到绿色。
在UITableView
中选择一个单元格会快得多。
【问题讨论】:
hm,可能是由于设置背景颜色等属性时的隐式动画。你能检查一下触摸是迟到还是只是颜色的变化? 你的这个 UIView 恰好在 UITableView 或者 UIScrollView 里面? @Volker 想法不错,但UIKit
禁用了底层CALayer
s (see this great answer here) 的隐式动画,所以我想这不是问题所在。我会寻找超级视图的delaysContentTouches
或类似的东西。
@Thedude -> 是的,它是一个 UITableViewCell
我知道这已经是一个公认的答案,但我建议你试试这个:UITableViews 默认延迟内容触摸。它有一个名为 delaysContentTouches 的属性,您应该将其设置为 NO。 developer.apple.com/library/ios/documentation/UIKit/Reference/…
【参考方案1】:
试试这个:
self.view.userInteractionEnabled = YES;
UILongPressGestureRecognizer *recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(doCallMethod:)];
recognizer.delegate = self;
recognizer.minimumPressDuration = 0.0;
[self.view addGestureRecognizer:recognizer];
- (void)doCallMethod:(UILongPressGestureRecognizer*)sender
if(sender.state == UIGestureRecognizerStateBegan)
NSLog(@"Begin");
self.view.backgroundColor = [UIColor greenColor];
else if (sender.state == UIGestureRecognizerStateEnded)
NSLog(@"End");
self.view.backgroundColor = [UIColor whiteColor];
注意: 它会工作得更快。
【讨论】:
好的,但是如果我把我的新视图放在 UITableViewCell 中......我不能滑动单元格来查看删除按钮:-( 有效,但是如果视图位于 UIScrollView 类型的 superView 内... ScrollView 无法通过在 minimumDressDuration = 0.0 的视图内开始滚动来滚动...所以你必须调整它价值例如0.1 ... UIScrollView 能够滚动 为什么touchesBegan会有延迟?无论如何要加快速度?【参考方案2】:您应该按照 TheBurgerShot 的建议使用手势识别器,但我建议您使用 UILongPressGestureRecognizer
。比如:
UILongPressGestureRecognizer *gesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(changeColor:)];
gesture.minimumPressDuration = 0.f;
[self.yourView addGestureRecognizer:gesture];
在您的viewDidLoad
中。并且:
-(void) changeColor:(UIGestureRecognizer *)gestureRecognizer
if (gestureRecognizer.state == UIGestureRecognizerStateBegan)
self.yourView.backgroundColor = [UIColor greenColor];
else if (gestureRecognizer.state == UIGestureRecognizerStateEnded)
self.yourView.backgroundColor = [UIColor whiteColor];
【讨论】:
你知道为什么touchesbegan会有一些延迟吗?使用手势可以解决问题,但不能像touches这样的属性都像多点触摸一样开始。以上是关于接触延迟开始的主要内容,如果未能解决你的问题,请参考以下文章