我想切换NSImageView
中显示的图像,但我想为该更改设置动画。我试过各种方法来做到这一点。希望你们中的一个可以提出一个可能实际工作的人。我正在与Mac可可一起工作。如何在NSImageView中为内容切换设置动画效果?
回答
您可以实现自己的自定义视图,该视图使用Core Animation CALayer
来存储图像。当您设置图层的contents
属性时,图像会自动从旧图像平滑地动画到新图像。
据我所知,NSImageView
不支持动画图像更改。但是,您可以在第一个位置放置第二个NSImageView
,并使用动画隐藏旧的并显示新的。例如:
NSImageView *newImageView = [[NSImageView alloc] initWithFrame: [imageView frame]];
[newImageView setImageFrameStyle: [imageView imageFrameStyle]];
// anything else you need to copy properties from the old image view
// ...or unarchive it from a nib
[newImageView setImage: [NSImage imageNamed: @"NSAdvanced"]];
[[imageView superview] addSubview: newImageView
positioned: NSWindowAbove relativeTo: imageView];
[newImageView release];
NSDictionary *fadeIn = [NSDictionary dictionaryWithObjectsAndKeys:
newImageView, NSViewAnimationTargetKey,
NSViewAnimationFadeInEffect, NSViewAnimationEffectKey,
nil];
NSDictionary *fadeOut = [NSDictionary dictionaryWithObjectsAndKeys:
imageView, NSViewAnimationTargetKey,
NSViewAnimationFadeOutEffect, NSViewAnimationEffectKey,
nil];
NSViewAnimation *animation = [[NSViewAnimation alloc] initWithViewAnimations:
[NSArray arrayWithObjects: fadeOut, fadeIn, nil]];
[animation setAnimationBlockingMode: NSAnimationBlocking];
[animation setDuration: 2.0];
[animation setAnimationCurve: NSAnimationEaseInOut];
[animation startAnimation];
[imageView removeFromSuperview];
imageView = newImageView;
[animation release];
如果你的观点是很大的,你可以要求10.5+,那么你可以做核心动画同样的事情,这将是硬件加速和占用更少的CPU。
创建newImageView后,做这样的事情:
[newImageView setAlphaValue: 0];
[newImageView setWantsLayer: YES];
// ...
[self performSelector: @selector(animateNewImageView:) withObject: newImageView afterDelay: 0];
- (void)animateNewImageView:(NSImageView *)newImageView;
{
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration: 2];
[[newImageView animator] setAlphaValue: 1];
[[imageView animator] setAlphaValue: 0];
[NSAnimationContext endGrouping];
}
你需要修改上面是中止的,但我不打算写所有的代码为你:-)
我希望能够强制动画在中间停下来;那可能吗? – 2010-05-09 02:45:57
当然,如果您使用NSAnimationNonblocking或NSAnimationNonblockingThreaded,并在某处保留对NSViewAnimation对象的引用,则可以调用[动画stopAnimation],然后将视图以任何您想要的方式放回。 – 2010-05-09 02:47:32
好吧,我试图做到这一点,但它真的很波涛汹涌。你知道如何做Rob Keniger的方法吗?这似乎是最简单的。 – 2010-05-09 02:56:59
- 1. 如何在javascript/css中为日志流设置动画效果
- 2. 如何在UITableView中为UIButton设置动画效果?
- 3. 仅在UIBarButtonItem中设置动画效果
- 4. 在Raphael.js中设置动画效果
- 5. 不要为转换中的属性设置动画效果
- 6. 如何在xcode中设置容器视图x&y位置的动画效果?
- 7. 如何为SVG中的一组对象设置动画效果?
- 8. 如何使用jQuery为背景位置设置动画效果?
- 9. 如何移动位图并为其设置动画效果
- 10. 如何在HTML5画布中为多边形大小设置动画效果?
- 11. Android动画标签内容切换
- 12. jQuery在切换内动画
- 13. 如何在UIView中设置动画效果
- 14. 如何在Inno Setup中设置动画效果
- 15. 如何在Android中设置两个硬币的动画效果
- 16. 在jQuery中,如何将动画效果(如slideDown)添加到动态内容中?
- 17. 如何在iPhone上手动设置动画效果?
- 18. 如何使用jQuery为文本链接设置动画效果?
- 19. 如何为GeometryDrawing的属性设置动画效果?
- 20. 如何为TextBlock上的TextDecoration Strikethrougn设置动画效果?
- 21. 如何为layer_list的项目设置动画效果?
- 22. 如何使用jquery为背部按钮设置动画效果?
- 23. 如何使用CAKeyframeAnimation为CATransform3D设置动画效果?
- 24. 如何为addClass()和removeClass jQuery方法设置动画效果?
- 25. 如何使用JavaScript为graphviz设置动画效果?
- 26. 如何使用JavaScript为元素programmaticaly设置动画效果?
- 27. 在Cocoa Touch中为图像视图设置动画效果
- 28. 在自定义视图中为Drawable设置动画效果
- 29. 可以在fabric.js中为路径设置动画效果吗?
- 30. 如何在AS3中为弧中的显示对象设置动画效果?
听起来不错。但我该怎么做? – 2010-05-09 02:50:42