イメージが 内でスケーリングされているかどうかによっては、CPU を少し消費する可能性がありますが、次のようにNSImageView
使用して同じことを達成できます。NSAnimationContext
NSRect oldFrame = self.imageView.frame;
NSRect newFrame = NSMakeRect(self.imageView.frame.origin.x,
self.imageView.frame.origin.y,
self.imageView.frame.size.width*1.2f,
self.imageView.frame.size.height*1.2f);
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
// Animating to the new frame...
[context setDuration:0.1f];
[[self.imageView animator] setFrame:newFrame];
} completionHandler:^{
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
// Back to the old frame...
[context setDuration:0.1f];
[[self.imageView animator] setFrame:oldFrame];
} completionHandler:nil];
}];
しかし、その方法は OS X 10.7 以降で動作します。
これは、コードに少し似た方法で行うこともでき、UIView
10.5 以降で動作します。
- (void)whatever {
NSRect oldFrame = self.imageView.frame;
NSRect newFrame = NSMakeRect(self.imageView.frame.origin.x,
self.imageView.frame.origin.y,
self.imageView.frame.size.width*1.2f,
self.imageView.frame.size.height*1.2f);
[self performSelector:@selector(animateImageViewToFrame:)
withObject:[NSValue valueWithRect:newFrame]
afterDelay:0];
[self performSelector:@selector(animateImageViewToFrame:)
withObject:[NSValue valueWithRect:oldFrame]
afterDelay:0.1f];
}
- (void)animateImageViewToFrame:(NSValue*)frameValue {
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:0.1f];
// Get smaller
[[self.imageView animator] setFrame:[frameValue rectValue]];
[NSAnimationContext endGrouping];
}
もちろん、これがうまくいけば素晴らしいでしょう:
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:0.1f];
[[self.imageView animator] setFrame:newFrame];
[NSAnimationContext endGrouping];
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:0.1f];
[[self.imageView animator] setFrame:oldFrame];
[NSAnimationContext endGrouping];
またはさらに良い:
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:0.1f];
[[self.imageView animator] setFrame:newFrame];
[[self.imageView animator] setFrame:oldFrame];
[NSAnimationContext endGrouping];
しかし、私には理解できない理由で、どちらも何もしません。
詳細については、NSAnimationContext クラス リファレンスを参照してください。