2

이 같은 값에 액세스 할 수 있습니다 내가하려고하면 키 - 값 - CALayer의 회전을 관찰하는 방법?

NSNumber* rotationZ = [myLayer valueForKeyPath:@"transform.rotation.z"]; 

그러나 어떤 이유로

는, 해당 키 경로를 KV-관찰, 나는 컴파일러 오류가 발생합니다.

[myLayer addObserver:self forKeyPath:@"transform.rotation.z" options:0 context:nil]; 

컴파일러는 나에게 말한다 : 첫째, 내가 그것을 시도하는 방법이다

인해 캐치되지 않는 예외 'NSUnknownKeyException', 이유는 응용 프로그램 종료

*** : '[ addObserver : forKeyPath : @ "rotation.z" 옵션 : 0x0 컨텍스트 : 0x528890] 이 "회전"속성에 대해 KVC 호환 이 아닌 개체로 전송되었습니다.

내가 얻지 못하는 것은, 왜 내가 KVC 키 경로로 그 z 값에 액세스 할 수 있지만 관찰자를 추가하지 않는 것입니다. 이게 말이 돼?

어떻게 그 행렬의 z 값을 관찰 할 수 있습니까? 행렬의 다른 값에 대해서는 신경 쓰지 않습니다. z 회전 만. 다른 방법으로 액세스하고 관찰 할 수 있습니까?

답변

1

CALayertransform 속성은 개체가 아닌 구조체이므로 KVC를 준수하지 않습니다.

당신이 할 수있는 일은, Z 로테이션에 바인딩하는 대신 변환 속성에 바인딩하고 KVO 알림을받을 때마다 Z 값을 꺼내는 것입니다.

여기 NSObject에서 도트 표기법을 사용하면 실제로 해당 객체의 - (id)property- (void)setProperty 메쏘드 (KVC 호환)를 사용한다는 혼란이 있다고 생각합니다. 구조체에 도트 표기법을 사용하면 메서드를 호출하지 않고 해당 구조체의 멤버에 액세스하고있는 것입니다.

+2

전혀 관찰하는 것이 불가능한 것처럼 보입니다. 나는 backgroundColor를 관찰 할 수있다. 하지만 layer.transform에서 시도해 보면 회전 할 때 아무런 변화가 없습니다. 내가 관찰자 객체로 레이어를 설정하고 keyPath에 대해 "변형"을 설정하면 같은 문제가 발생합니다. 변환 행렬의 변화를 관찰 할 방법이없는 것처럼 보입니다. –

+0

여기와 같습니다. 당신은 단순히 그것을 관찰 할 수없는 것처럼 보입니다. 나쁜쪽으로. Apple이 애니메이션 중에 멀리하고 싶어하는 것이 성능상의 문제 일 것입니다. – zumzum