2011-05-06 4 views
4

아직도 애플이 옛날 방식의 애니메이션을 권장하지 않고 대신 블록을 사용한다고 말하는 이유는 아직 없습니다.begin/commitAnimations vs 블록 기반 애니메이션

내말은, 어떻게 옛날 방식을 사용하는 것이 현실적으로 멈출까요? 블록이 iOS> 4.0에만 해당하지 않습니까? 코드를 if으로 채우고 현재 장치의 시스템 버전을 기반으로 두 가지 구현을해야합니까? 이전 방법이 정상적으로 작동하는 이유는 무엇입니까? 또한 기본 구현은 동일해야합니다. 맞습니까? 시작/커밋이 추악한 코드를 생성한다는 사실을 제외하고는 어떤 이유가 있습니까?

답변

2

난 여전히 대신 애플 이 애니메이션을하는 기존의 방법을 권장하지 왜 그것을 얻을하지 않으며는 블록을 사용했다.

Apple은 최신 기술을 사용하기를 바랍니다. Apple은 블록 기반 애니메이션에 대한 새로운 iOS 릴리즈를 모두 최적화 할 것이며 아마도 블록 기반 애니메이션에만 새로운 가능성을 추가 할 것입니다. 그래서 애플이 블록 기반 애니메이션으로 당신을 밀어 넣는 이유가 여기 있습니다.

내 말은 어떻게 이전의 방법을 사용하지 않겠습니까? 블록이 iOS> 4.0에만 해당하지 않습니까?

예, 블록은 iOS> 4.0 전용입니다. 따라서 앱이 iOS 4.0 이상을 위해 설계된 경우에만 블록 기반 애니메이션을 사용할 수 있습니다. 또는 블록 사용 가능 여부를 확인하고 iOS 4.0 이상 기기의 특정 애니메이션 만 추가 할 수 있습니다. 하나는 IFS와 코드를 작성하고 현재 장치의 시스템 버전을 기반으로 두 개의 서로 다른 구현을하기로되어

아이폰 OS 3에 대한 지원을 떨어 뜨리면

완전히 옛날 방식을 애니메이션 중단은 현실? 이전 방법이 정상적으로 작동하는 이유는 무엇입니까? 또한 기본 구현은 동일해야합니다. 맞습니까? 시작/커밋이 추악한 코드를 생성한다는 사실을 제외하고는 어떤 이유가 있습니까?

이전 방법이 괜찮 으면서 이전 (iOS 3) 장치를 지원하고 싶다면. 이전 방식으로 애니메이션을 만드십시오. 아무 문제가 없으므로 코드에 불필요한 if 문을 넣지 마십시오. 그것은 일을 복잡하게 만들 뿐이며 그 일을하면 아무 것도 얻지 못합니다.

귀하의 앱이 iOS 4 블록을 사용하는 경우, 블록이 짧고 약간 청소됩니다. 또한 유지 보수가 쉬워야합니다. Apple이 이전 방식으로 애니메이션을 업데이트하지 않기 때문입니다.

(블록으로 만 할 수있는 애니메이션이있는 경우 미래의 어딘가에 if 문을 추가 한 다음 이전 방법으로 다른 덜 복잡한 애니메이션으로 폴백 할 수 있습니다.)

3

이전 방법은 정상적으로 작동하지만 블록을 사용하면 완료 블록을 가질 수있는 옵션이 있다고 생각합니다. 이전 방식과 마찬가지로 애니메이션이 시작되고 코드가 즉시 실행을 다시 시작합니다. 그래서 다음과 같은 것은 프레임을 이동시키기위한 애니메이션이 완료된 후에 만 ​​(이 경우에는 중첩 된 애니메이션 블록) 뷰의 알파를 설정합니다. 알파 애니메이션이 끝나면 슈퍼 뷰에서 뷰를 제거합니다.

[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationCurveEaseOut animations:^(void) { 
     CGRect frame = self.actionView.frame; 
     self.actionView.frame = CGRectMake(frame.origin.x, 370, frame.size.width, frame.size.height); 
    } 
        completion:^(BOOL finished) {       
         [UIView animateWithDuration:0.2 delay:0 options:0 animations:^(void) { 
          [self.blockingView setAlpha:0];        
         } completion:^(BOOL finished) { 
          [self.actionView removeFromSuperview]; 
          [self.blockingView removeFromSuperview]; 
         }]; 

        }]; 

당신은있는 UIView 블록 방법을 지원하는 경우 기존의 방법을 사용하지 않을 경우, 결정 [respondsToSelector]를 사용해야합니다, 당신은 아마 중첩 된 애니메이션을 재현하는 타이밍 창조해야 할 것이다.

+0

글쎄,'UIView'의'setAnimationDidStopSelector'는 이전 방법과 똑같습니다. 맞습니까? (내가 말했듯이, 지저분한 코드를 권장한다는 사실을 제외하고) – pt2ph8

+0

예, 작동하지만 코드를 추적하고 디버그하기가 더 어렵습니다. –

+0

예. 그리고 if와 함께 두 가지 방법을 모두 사용하면 코드가 더욱 악화됩니다. 애플이 아이폰 OS 4.0 이하에 대한 지원을 중단 할 것이라고 말하는가? – pt2ph8

관련 문제