[英]Animation doesn't work
我的動畫有問題。 問題是,如果我嘗試為已經創建的視圖設置動畫,那么一切順利,如果我嘗試在動畫不起作用的同時創建和動畫視圖。
誰能幫我?
我的方法
+ (LoginView *)sharedInstance {
@synchronized(self) {
if (nil == _sharedInstance) {
_sharedInstance = (LoginView *)[[[NSBundle mainBundle] loadNibNamed:@"LoginView" owner:nil options:nil] objectAtIndex:0];
}
}
return _sharedInstance;
}
- (void)hide:(BOOL)value animated:(BOOL)animated {
CATransition * animation = [CATransition animation];
animation.type = kCATransitionFade;
[animation setDuration:1.0];
if(_autoManageModalView)
[animation setDelegate:self];
[[self layer] removeAllAnimations];
[[self layer] addAnimation:animation forKey:kCATransition];
self.hidden = value;
}
我怎么稱呼他們
[[LoginView sharedInstance] hide:NO animated:YES];
第一次(使用相同的調用)動畫不起作用,從第二次開始一切順利。 預先感謝!
您在其生命周期中過早地為您的視圖制作動畫。 理論上,您創建一個視圖,然后將其顯示在某個地方(例如, addSubview:
,然后為其設置動畫。
雖然我沒有檢查過,但很有可能第一次調用hide:animated:
方法時self.layer
屬性為null; 在任何情況下,動畫都會在視圖顯示之前發生,所以你不會看到它。
總而言之,首先顯示視圖,然后調用hide:animated:
方法。
評論之后:嘗試通過以下方法調用hide:animated:
方法:
performSelector:withObject:afterDelay:
如果指定0.0延遲,這將簡單地將調用隊列loadNibNamed:
hide:animate:
在主循環上,以便與loadNibNamed:
相關的所有處理都可以發生,從而為視圖設置正確顯示的時間。
為了使用performSelector:withObject:afterDelay:
你需要修改你的方法簽名,以便它接受一個參數,這必須是NSObject派生的類型,而不是基本類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.