2010-04-12 3 views
2

나는 그런 내 아이폰 응용 프로그램에서 일부 코드가 있습니다새로운 UIImageView에서 애니메이션을 적용 할 수없는 이유는 무엇입니까?

//fromView is a UIImageView. 
//self is a UIView. 
     UIGraphicsBeginImageContext(fromView.bounds.size); 
     [fromView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
     UIImage *dummyFromImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     UIImageView* dummyImageView = [[UIImageView alloc] initWithImage:dummyFromImage]; 
     [self addSubview:dummyImageView]; 
     [UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:0.5]; 
     [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView: dummyImageView cache:YES]; //line:9 
     [UIView commitAnimations]; 

dummyImageView 만 보여하지만 당신은 fromView에 line9의 dummyImageView을 변경하는 경우, 플립 결코를 fromView 플립 않습니다 말해 왜하세요?

답변

3

나는

코어 애니메이션에서 애니메이션에 대한 이전 "상태로,"기본적인 문제는 애니메이션의 타이밍의 어떤이 없다는 것입니다 "그들은 말했다, 애플 개발자 기술 지원이 질문을 보기가보기 계층에 추가되었으므로 전환이 시도되면 "최종"상태가 표시됩니다.

대신 다음 실행 루프 반복에서 플립을 수행하면 코어 애니메이션에 보기의 레이어에 대한 초기 상태를 만들 시간이 있었으므로 뒤집기가 올바르게 수행됩니다. flip 메서드를 두 개로 나누고 -performSelector : withObject : afterDelay를 사용하여 이렇게 할 수 있습니다. 0 fromView "당신이 언급 이후

-(IBAction)flip { 

    UIImageView* dummyImageView = [[UIImageView alloc] initWithImage:fromView.image]; 
    dummyImageView.frame = fromView.frame; 
    [window addSubview:dummyImageView]; 

    [self performSelector:@selector(animate:) withObject:dummyImageView afterDelay:0.0]; 
} 

-(void)animate:(UIView*)view { 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView: view cache:YES]; 
    [UIView commitAnimations]; 
} 

그러나"는 : - fromView가 "사용하고 지정"있는 UIImageView에, 당신이 -renderInContext 사용하는 이유를 궁금해 단순히 것과 동일한 이미지를 사용하는 것이 더 효율적이다 " 그것은 새로운 UIImageView에 대한 이미지로서 CPU 시간과 메모리를 절약 할 수 있습니다. 특히 샘플에서 이미지가 사용중인 뷰보다 작기 때문에주의해야합니다.

1
[UIView setAnimationTransition:… forView: dummyImageView cache:YES]; //line:9 

-setAnimationTransition:… 방법 뷰는 변경에 포함 된 도면에 할당되어야한다. 귀하의 경우, self.

dummyImageView 자체는 변경되지 않습니다 (수퍼 뷰 변경과 같은 외관 변경은 무관합니다). 따라서 애니메이션은 아무 것도 할 수 없습니다.

관련 문제