我想切換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. 如何通過多次變換爲CATransform3D設置動畫效果?
- 2. 如何在viewpager中爲片段設置動畫效果?
- 3. 如何在UITableView中爲UIButton設置動畫效果?
- 4. 如何在javascript/css中爲日誌流設置動畫效果
- 5. 在圖像中設置動畫效果
- 6. 在Raphael.js中設置動畫效果
- 7. 僅在UIBarButtonItem中設置動畫效果
- 8. 在android中設置動畫效果?
- 9. 爲此徽標設置動畫效果
- 10. 不要爲轉換中的屬性設置動畫效果
- 11. 如何在xcode中設置容器視圖x&y位置的動畫效果?
- 12. 如何爲SVG路徑中的「填充」設置動畫效果?
- 13. 如何爲SVG中的一組對象設置動畫效果?
- 14. 如何使用jQuery爲背景位置設置動畫效果?
- 15. 如何移動位圖併爲其設置動畫效果
- 16. 如何爲改變HTML內容添加動畫/效果?
- 17. 如何在HTML5畫布中爲多邊形大小設置動畫效果?
- 18. Android動畫標籤內容切換
- 19. jQuery在切換內動畫
- 20. 如何在Inno Setup中設置動畫效果
- 21. 如何在Android中設置兩個硬幣的動畫效果
- 22. 如何在UIView中設置動畫效果
- 23. 如何在Android中設置動畫效果?
- 24. jQuery的動畫效果全格內容
- 25. 在jQuery中,如何將動畫效果(如slideDown)添加到動態內容中?
- 26. 如何在iPhone上手動設置動畫效果?
- 27. 如何使用jQuery切換()動畫(滑動)與內容相鄰的內容
- 28. 如何爲layer_list的項目設置動畫效果?
- 29. 如何使用CAKeyframeAnimation爲CATransform3D設置動畫效果?
- 30. 如何使用jquery爲背部按鈕設置動畫效果?
聽起來不錯。但我該怎麼做? – 2010-05-09 02:50:42