2010-07-13 28 views
36

Tôi đã kết nối hai phương pháp dưới đây để tách các nút trong giao diện người dùng nhưng đã nhận thấy rằng sau khi nhấn nút "PHIÊN BẢN 1" mà tôi không thể nhấn lại nút cho đến khi thời lượng hoạt ảnh trong phương thức đã kết thúc. Sự hiểu biết của tôi là hoạt ảnh sử dụng chuỗi riêng của nó để không chặn ứng dụng chính.không animateWithDuration: hoạt ảnh: chặn chuỗi chính?

// VERSION 1 
-(IBAction)fadeUsingBlock { 
    NSLog(@"V1: Clicked ..."); 
    [myLabel setAlpha:1.0]; 
    [UIView animateWithDuration:1.5 animations:^{ 
     [myLabel setAlpha:0.0]; 
    }]; 
} 

Phiên bản kiểu cũ hơn (dưới) cho phép nút bị khóa trước khi bộ hẹn giờ hoạt ảnh kết thúc, chỉ cần đặt lại bộ hẹn giờ để bắt đầu lại. Nếu cả hai đều làm việc giống nhau, tôi thiếu một cái gì đó hoặc đã có một sự thay đổi trong hoạt động giữa 3,2 và 4?

// VERSION 2 
-(IBAction)fadeUsingOld { 
    NSLog(@"V2: Clicked ..."); 
    [myLabel setAlpha:1.0]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1.5]; 
    [myLabel setAlpha:0.0]; 
    [UIView commitAnimations]; 
} 

Cheers gary

Trả lời

86

Hoạt ảnh với các khối không chặn chủ đề chính. Tôi cho rằng hành vi bạn thấy là bởi vì theo mặc định, tương tác của người dùng bị tắt hoạt ảnh thời lượng với các lệnh gọi khối mới. Bạn có thể ghi đè lên điều này bằng cách đi qua UIViewAnimationOptionAllowUserInteraction (gọi animationWithDuration:delay:options:animations:completion), như thế này:

-(IBAction) fadeUsingBlock { 
    NSLog(@"V1: Clicked ..."); 
    [myLabel setAlpha:1.0]; 
    [UIView animateWithDuration:1.5 
          delay:0 
         options:UIViewAnimationOptionAllowUserInteraction 
        animations:^{ 
         [myLabel setAlpha:0.0]; 
        } 
        completion:nil]; 
} 
+2

Ah có ý nghĩa, tôi đã bỏ lỡ rằng tùy chọn trong các tài liệu, tôi sẽ xem xét nó lên. Cảm ơn nhiều, nhiều đánh giá cao. – fuzzygoat

+1

Cảm ơn vì điều này. Chết tiệt, điều này đã làm tôi thất vọng. Nó thực sự khá khó chịu nó không phải là theo mặc định, bởi vì nó nói nó chặn tương tác với xem được hoạt hình, nhưng trong thực tế nó chặn toàn bộ giao diện người dùng! – runmad

+0

Người đàn ông, nó sẽ không được tốt đẹp nếu điều này đã được cố định trong sắp tới iOS 5.0 ...

1

Đối animateWithDuration :, tài liệu tham khảo lớp không nói bất cứ điều gì về luồng, vì vậy tôi không chắc chắn.

Đối với beginAnimations:context: and commitAnimation:, vâng, chúng chạy trong một luồng riêng biệt UIView class Reference.

Một số thay đổi thuộc tính để xem các đối tượng có thể hoạt ảnh — ví dụ, đặt khung, giới hạn, căn giữa và biến đổi thuộc tính. Nếu bạn thay đổi các thuộc tính này trong khối hoạt ảnh, các thay đổi từ trạng thái hiện tại sang trạng thái mới sẽ được làm động. Gọi beginAnimations: context: class method để bắt đầu một khối hoạt hình, thiết lập các thuộc tính bạn muốn hoạt hình, và sau đó gọi phương thức lớp commitAnimations để kết thúc một khối hoạt hình. Các hình động được chạy trong một chuỗi riêng biệt và bắt đầu khi ứng dụng quay trở lại vòng lặp chạy. Các phương thức lớp hoạt ảnh khác cho phép bạn kiểm soát thời gian bắt đầu, thời lượng, độ trễ và đường cong của hoạt ảnh trong khối.

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