2011-07-20 17 views
5

Trong phương thức viewDidLoad của tôi, tôi đặt một nút ở bên trái của chế độ xem, tắt màn hình.setFrame trong hoạt ảnh UIView không di chuyển, chỉ chụp tại chỗ

Sau đó, tôi sử dụng hai phương thức này để animate nó:

-(void) viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    [self showButton]; 
} 

Và phương pháp:

-(void) showButton { 
    [myButton setTitle:[self getButtonTitle] forState:UIControlStateNormal]; 

    // animate in 
    [UIView beginAnimations:@"button_in" context:nil]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(animationDone)]; 
    [UIView setAnimationDuration:1.0]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [myButton setFrame:kMyButtonFrameCenter]; // defined CGRect 
    [UIView commitAnimations]; 
} 

Nút ngay lập tức xuất hiện và không sinh động. Hơn nữa, bộ chọn animationDone được gọi ngay lập tức.

Tại sao nó không hoạt ảnh nút của tôi trên màn hình?

EDIT: Đây có phải có một cái gì đó để làm với cố gắng để bắt đầu một hình ảnh động trong khi ở viewDidAppear ...

+0

lạ nếu tôi đợi một chút, hoạt ảnh sẽ hoạt động. – TigerCoding

Trả lời

6

Tôi đã thử mã hình ảnh động của bạn và nó hoạt động tốt.

Vị trí đặt khung ban đầu của nút? Có thể bạn đã đặt nhầm khung của nút thành kMyButtonFrameCenter trước khi bạn bắt đầu hoạt ảnh? Điều đó sẽ giải thích tại sao bộ chọn animationDone được gọi ngay lập tức.

Dưới đây là đoạn code mà hoạt động:

-(void) showButton { 
    UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [myButton setTitle:@"test" forState:UIControlStateNormal]; 
    myButton.frame = CGRectMake(-100.0, 100.0, 100.0, 30.0); 
    [self.view addSubview:myButton]; 

    // animate in 
    [UIView beginAnimations:@"button_in" context:nil]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(animationDone)]; 
    [UIView setAnimationDuration:1.0]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [myButton setFrame:CGRectMake(100.0, 100.0, 100.0, 30.0)]; 
    [UIView commitAnimations]; 
} 

Như bạn thấy tôi không thay đổi bất cứ điều gì trong mã hoạt hình của bạn. Vì vậy, tôi nghĩ rằng vấn đề là khung của nút.

Một chút ngoài chủ đề: Nếu bạn không xây dựng ứng dụng của mình cho iOS < 4, bạn có thể muốn xem "hoạt ảnh với khối" của UIView đi kèm với iOS 4.0.

[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationCurveEaseIn animations:^void{myButton.frame = kMyButtonFrameCenter} completion:^(BOOL completed){NSLog(@"completed");}]; 

=== EDIT ===

Sau khi đọc bình luận của bạn, có vẻ như sự nghi ngờ của tôi là không đúng. inspire48 điểm đúng hướng với câu trả lời của mình. Bạn nên đặt vị trí của các nút bên trong phương pháp viewDidAppear hoặc trong phương pháp showButton để đảm bảo rằng các nút được đặt bên ngoài màn hình trước bạn gọi hoạt hình

+0

Tôi đã thử đặt nó trong viewDidAppear nhưng nó không có hiệu lực. Tuy nhiên, tôi đã tìm thấy rằng bằng cách sử dụng một bộ đếm thời gian với một sự chậm trễ là 0,2 sẽ làm cho mọi thứ hoạt động. – TigerCoding

+1

Bạn đã thử làm như tôi đã làm trong đoạn mã trên chưa? Bởi vì nó hoạt động. Bạn có rất nhiều UIElements cần phải được rút ra khi khung nhìn xuất hiện? – joern

+0

Vâng, tôi chỉ cho nó một vòng xoáy. Tôi đã thử đặt khung hình ngay tại đó, đặt 'trung tâm' và một vài thứ khác. Cuối cùng tôi chỉ đơn giản là thiết lập một bộ đếm thời gian để tắt 0,2 giây sau khi viewDidAppear và mọi thứ hoạt động theo cách đó. Tôi vẫn không biết tại sao. – TigerCoding

3

Đặt cuộc gọi hình ảnh động trong viewDidAppear. viewDidLoad được sử dụng để thiết lập kiểu dữ liệu hơn. Bất kỳ hiệu ứng hình ảnh nào chẳng hạn như hoạt ảnh sẽ xuất hiện trong viewDidAppear. Bạn đã xác nhận điều này — nó hoạt động nếu bạn chờ một chút.

+0

Cuộc gọi động là trong viewDidAppear nhưng có lẽ nó cũng giúp đặt vị trí của nút trong đó (trước khi bạn gọi phương thức showButton) – joern

+0

Tôi đã thử đặt vị trí nút trong chế độ xem đã xuất hiện trước, nhưng nó không giúp ích gì. – TigerCoding

Các vấn đề liên quan