簡體   English   中英

UIView動畫第一次不起作用

[英]UIView animation doesn't work first time

我在導航欄中有一個seachButton,當點擊以下方法時會調用它:

- (IBAction)search:(id)sender
{
if (nil == searchViewController)
    searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];

searchViewController.view.backgroundColor = [UIColor clearColor];

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown
                       forView:searchViewController.view
                         cache:NO];

[self.view addSubview:searchViewController.view];
[UIView commitAnimations];
}

它應該加載SearchViewController.xib,其中包含帶有UISearchBar和兩個按鈕的視圖。 當我第一次調用搜索方法時,帶有一些奇怪動畫的視圖會很快出現,而當我再次調用它時,動畫就可以了。 有人知道什么地方可能出問題嗎?

將兩個視圖添加到appdelegate中的窗口中,我遇到了與您相同的問題,並且可以正常工作。 奇怪,因為稍后我將其從超級視圖中刪除,但它仍在工作。

在調用view方法之前,UIViewController不會加載其視圖。 我猜問題是第一次調用動畫時視圖未加載。 您可以嘗試修改您的代碼,如下所示:

if (nil == searchViewController) {
    searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];
    searchViewController.view;
}

嘗試將動畫代碼放入viewDidLoad函數中。 這樣可以確保nib文件中的所有資產和視圖均已加載,並且可以被您的應用使用。

- (IBAction)search:(id)sender
{
if (nil == searchViewController)
    searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];

[self.view addSubview:searchViewController.view];
}

-(void)viewDidLoad
{
self.view.backgroundColor = [UIColor clearColor]; 
[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:1.0]; 
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown 
                   forView:self.view 
                     cache:NO];
[UIView commitAnimations];
}

嘗試將用於動畫和視圖加載的代碼放在viewDidAppear:方法中,而不是viewDidLoad: (克里斯在上面建議)。

通常,在viewDidLoad:執行視圖相關的操作時遇到問題。 但是在viewDidAppear:執行這些操作總是有幫助的(我可能會遺漏一些導致此行為的細微差別)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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