2012-04-03 18 views
5

Tôi gặp vấn đề này khi tôi thêm UIActivityIndicatorView vào UIScrollView; Mọi thứ đều hoạt động tốt, ngoại trừ nó không bắt đầu quay trừ khi UIScrollView được cuộn.UIActivityIndicatorView không quay

Có ai có thể giúp tôi giải quyết vấn đề này không?

Cảm ơn bạn.

đây là một số mã:

UIActivityIndicatorView *loaderActivity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    loaderActivity.center = CGPointMake(87/2,y+56/2); 
    loaderActivity.tag=tag; 
    [mainScrollView addSubview:loaderActivity]; 
    [loaderActivity startAnimating]; 
    [loaderActivity release]; 
+0

bạn có thể thêm mã tại đây để biết thêm thông tin về câu hỏi hay không. –

+0

một điều nữa để bắt đầu hoạt động chạy, bạn cần phải gọi phương thức sau khi hoạt động được thêm vào trong chế độ xem hoặc trên bất kỳ sự kiện nào như bấm nút hoặc chỉ thiết lập performselector với độ trễ nhỏ. –

+0

bạn có đang thực hiện một tác vụ khác trong chuỗi chính không? nếu có, chủ đề chính sẽ được sử dụng cho tác vụ đó và sẽ dừng hoạt ảnh cho đến khi tác vụ đó kết thúc. –

Trả lời

6

Bạn cần phải gọi startAnimating trên chỉ số hoạt động để có nó sinh động. Ngoài ra, trong trình xây dựng giao diện, bạn có thể đánh dấu vào ô "hoạt hình".

+0

Tại sao câu trả lời này không được chấp nhận? – Omeed

+0

Câu hỏi hay hơn là cách sử dụng là chỉ báo hoạt động không hoạt ảnh và tại sao đó là trạng thái mặc định? – devios1

0

Thử chạy trình làm hoạt ảnh theo một chủ đề khác.

NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(showProgress) object:nil]; 
[thread start]; 

//do whatever your want here 

//call this when you want it stop animating 
    [activityIndicator stopAnimating]; 
    [thread release]; 


- (void)showProgress{ 

    [activityIndicator startAnimating]; 

} 
+0

Tôi không nghĩ rằng đó là một vấn đề thread. Nhưng cảm ơn bạn – astazed

2
activityIndicator = [[UIActivityIndicatorView alloc] 
initWithFrame:CGRectMake(87/2,y+56/2); 
[activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite]; 
activityIndicator.tag=tag; 
[mainScrollView addSubview:loaderActivity]; 
[activityIndicator startAnimating]; 
[activityIndicator release]; 
3

Thực tế là nó không tạo hiệu ứng động cho đến khi bạn di chuyển trong giao diện cuộn là một triệu chứng mà cuộc gọi của bạn để startAnimating đang xảy ra trong một thread nền. Các cuộc gọi UIKit phải được thực hiện trong chuỗi chính.

Bạn có thể xác minh rằng nó đang xảy ra trong một thread nền bằng cách thêm mã như thế này:

if ([NSThread isMainThread]) { 
    NSLog(@"Running on main thread."); 
} else { 
    NSLog(@"Running on background thread."); 
} 

Bạn sẽ muốn chắc chắn tất cả các mã bạn thấy trong câu hỏi của bạn đang chạy trên các chủ đề chính. Để làm điều này, bạn có thể thay đổi mã của bạn để tìm kiếm một cái gì đó như thế này:

// this code would be wherever your existing code was 
[self performSelectorOnMainThread:@selector(addActivityIndicatorToView:) withObject:mainScrollView waitUntilDone:YES]; 

// this would be a new method in the same class that your existing code is in 
- (void) addActivityIndicatorToView:(UIView*) view { 
    UIActivityIndicatorView *loaderActivity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    loaderActivity.center = CGPointMake(87/2,y+56/2); 
    loaderActivity.tag=tag; 
    [view addSubview:loaderActivity]; 
    [loaderActivity startAnimating]; 
    [loaderActivity release]; 
} 
0

Đã có một vấn đề mà tôi đã startAnimating cuộc gọi trong viewDidLoad và đã không làm việc. Tôi đã chuyển cuộc gọi trong số viewWillAppear và nó đã hoạt động!