UIImageView의 서브 클래스가 있는데, 주기적으로 다른 이미지를 새로 고칩니다. 위의 코드 대신, 내가 사용하기로 결정 때[UIViewAnimationState animationDidStop : finished :] : 할당 된 인스턴스에 메시지가 전송되었습니다.
UIImage *cachedImage = [[SDImageCache sharedImageCache] imageFromKey:blobKey];
if(cachedImage==nil) {
NSData *imageData=[NSData dataWithContentsOfURL:url];
cachedImage = [UIImage imageWithData:imageData];
[[SDImageCache sharedImageCache] storeImage:cachedImage imageData:imageData forKey:blobKey toDisk:YES];
}
self.image=cachedImage;
CATransition *transition = [CATransition animation];
transition.duration = 2.0f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;
[self.layer addAnimation:transition forKey:nil];
문제는, "블록은"애플과 같은 스타일의 애니메이션은 4.0 이상 iOS 용 제안 : 나는 어떤 문제없이 아래의 코드를 사용
[UIView transitionWithView:self duration:2.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
self.image=cachedImage;
} completion:^(BOOL finished) {
// do something..
}];
새 코드를 적용한 후에 "메시지가 할당 취소 된 인스턴스로 전송되었습니다"라는 오류 메시지가 나타납니다. (iOS 5.1 SDK 및 ARC를 사용할 수 있습니다.) 블록 프로그래밍에 대해 배워야 할 부분이 있습니까?
블록 실행 전에'self.retainedImage = cachedImage'를 호출하여 제안한 것처럼 여분의 holder 속성을 추가하려고했습니다. 하지만 여전히 메시지가 나타납니다 : - [UIViewAnimationState retain] : 메시지가 할당 취소 된 인스턴스로 전송되었습니다. (원래 게시물에 cachedImage를 만든 방법에 대한 코드를 추가했습니다.) –