簡體   English   中英

動畫不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM