2011-10-13 4 views
2

CALayer의 이동이 UIView보다 느린 이유는 무엇입니까?

다음과 같은 재정의 된 메서드를 사용하여 사용자가 터치 할 때 주위에 움직이는 UIView 하위 클래스가 있습니다.

EventView를 UIView 대신 CALayer로 만들면 이동 속도가 느려지는 이유는 무엇입니까? 기다? 그 코드도 게시 할 수는 있지만 너무 유사하여 필자는 필요하다고 생각하지 않는다.

저수준으로 추상화하면 이벤트 처리 속도가 빨라지 겠지만 뭔가 빠져 있어야합니다. 그런데 *eventViewUIView 또는 CALayer의 하위 클래스 인 경우 position 속성은 다음과 같습니다.

CALayer에 UIView를 사용할 때 대기 시간이 크게 감소하는 이유는 확실하지 않습니다. ..

답변

5

대부분의 CALayer 속성은 기본적으로 애니메이션으로 변경되므로 대기 시간 감소가 그 원인 일 수 있습니다.

레이어 위치가 변경되면 애니메이션을 비활성화 할 수 있습니다. 가능한 해결책은 예를 들어 herehere

+1

아처럼 사용할 수있는 종류의 방법을 구현 한; 'position'에 대한 레이어의'actions' 사전에'[NSNull null]'을 추가하면 레이어의 이동 대기 시간이'UIView'의 그것과 비슷해졌습니다. –

1

에서 설명합니다. 이것은 암시 적 애니메이션 때문입니다.

는 I 그 definetely 그것이, 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 
+0

'frame'은 애니메이션 속성이 아니며 키 사전에 포함될 필요가 없습니다. – titaniumdecoy

+0

@titaniumdecoy 업데이트했습니다. – hfossli

관련 문제