我有一个UIView子类,当用户触摸它时,使用以下重写方法移动'event':
// In a custom UIView...
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint point = [[touches anyObject] locationInView:self];
UIView *eventView = [self.ringOfEvents hitTest:point withEvent:event];
for (EventView *e in self.events) {
if (e == eventView) {
event.position = point;
}
}
}
为什么当我使EventView
成为CALayer而不是UIView时,运动会慢慢变成蠕变?我也可以发布该代码,但它非常相似,我认为没有必要。
我认为抽象到较低级别会加速事件处理,但我必须遗漏一些东西。
顺便说一句,如果*eventView
是UIView
或CALayer
的子类,则position
属性如下:
- (void)setPosition:(CGPoint)pos {
self.layer.position = pos;
}
- (CGPoint)position {
return self.layer.position;
}
不确定为什么当使用UIView作为CALayer时,我的延迟会大大减少..
答案 0 :(得分:6)
答案 1 :(得分:2)
这是由隐式动画引起的。
我已经实现了一个类别方法,可以删除givven键的隐式动画,并且可以像这样使用
[view.layer setNullAsActionForKeys:@[@"bounds", @"position"]];
实施
@implementation CALayer (Extensions)
- (void)setNullAsActionForKeys:(NSArray *)keys
{
NSMutableDictionary *dict = [self.actions mutableCopy];
if(dict == nil)
{
dict = [NSMutableDictionary dictionaryWithCapacity:[keys count]];
}
for(NSString *key in keys)
{
[dict setObject:[NSNull null] forKey:key];
}
self.actions = dict;
}
@end