2010-02-02 37 views
7

Tôi cố gắng để thêm một hình ảnh động để viewDidLoad và viewDidAppear, nhưng nó không hoạt động:Cách thêm hoạt ảnh vào UIView trong chế độ xemDidAppear?

- (void)viewDidAppear:(BOOL)animated{ 
[UIView beginAnimations:@"transition" context:NULL]; 
[UIView setAnimationTransition:110 forView:self.view cache:YES]; 
[UIView commitAnimations]; 
} 

Tại sao?

Trả lời

0

Bạn không cho biết chế độ xem trạng thái sẽ hoạt ảnh như thế nào để nó không hoạt động. Bạn cần đặt mã giữa beginAnimations:context:commitAnimations thay đổi giao diện của chế độ xem (ví dụ: bằng cách xóa một chế độ xem phụ và thêm một chế độ xem phụ khác).

+0

Hm, tôi nghĩ tôi không cần phải nói cho anh ấy điều này. Tôi đã thử mã của tôi vào một IBAction và nó hoạt động. Tôi đã viết setAnimationTransition: forView: vì vậy tôi đã viết trong đó hoạt ảnh phải ở chế độ xem riêng. Nó không hoạt động trong viewDidLoad và viewDidAppear-methode. – Flocked

0
  1. Bạn hiện không sử dụng chính xác beginAnimations:commitAnimations. Bạn phải đặt một cái gì đó ở giữa chúng mà bình thường sẽ không được hoạt hình: ví dụ: với self.view.alpha = 0.5 bạn sẽ nhận được hiệu ứng mờ dần. Chúng không ảnh hưởng đến bất kỳ thứ gì không nằm giữa chúng.

  2. Đến thời điểm viewDidAppear: được gọi, chế độ xem của bạn, vâng ... đã xuất hiện. Đã quá muộn để làm bất cứ điều gì. Những gì bạn thực sự muốn làm là một cái gì đó như thế này:

    - (void)showMyViewWithAnimation { 
        [UIView beginAnimations:nil context:nil]; 
        [UIView setAnimationTransition:110 forView:childView cache:YES]; 
        [parentView addSubview:childView]; 
        [UIView commitAnimations]; 
    } 
    

    Trong ví dụ trên, childView là những gì trong ví dụ của bạn được gọi self.view.

  3. Hãy viết tên của quá trình chuyển đổi; không ai biết 110 là gì bằng cách nhìn vào nó. Đó là phong cách xấu. </pedantry>

+0

Lỗi trong mã đó là bạn nên thực hiện 'setAnimationTransition: forView:' trên 'self.view', không phải' drum.view'. Trong tài liệu, nó nói: "Đặt quá trình chuyển đổi trên chế độ xem vùng chứa." – lawrence

+0

Nhưng tôi muốn hiệu ứng cho drum.view;) Đó là lý do, tại sao tôi đã cố gắng để có được các hình ảnh động vào viewDidLoad của drumViewController. – Flocked

24

Tôi gặp vấn đề tương tự và tôi nghĩ mình đã tìm thấy giải pháp trên SO question này.

Khi viewDidAppear được gọi là bạn vẫn không thấy bất kỳ thứ gì trên màn hình (mặc dù tên), nhưng bạn sắp sửa. Sau đó, bạn có thể sử dụng performSelector: withDelay hoặc NSTimer để khởi chạy hoạt ảnh của mình. Độ trễ chỉ có thể là 0.1 và hoạt ảnh của bạn sẽ chỉ phát khi màn hình xuất hiện.

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

    NSLog(@"View did appear!"); 

    [self performSelector:@selector(animationCode) withObject:nil afterDelay:0.1f]; 
} 

- (void)animationCode { 
    // you animation code 
} 
+0

Điều này làm việc cho tôi. Cảm ơn! – windson

+0

Tôi đã đọc rất nhiều bài báo trước đây. Và chỉ điều này làm tôi vui, Cảm ơn. –

+0

Cảm ơn! Điều này làm việc cho tôi quá! –

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