2009-07-16 43 views
6

Dường như đây là một vấn đề khá đơn giản, nhưng tôi không thể tìm thấy bất kỳ câu trả lời hay nào.Làm cách nào để triển khai hoạt ảnh tải khi điều hướng trong ứng dụng iPhone?

Điều tôi đang cố gắng thực hiện là tạo một số loại hoạt ảnh trong khi một số chức năng đang tải. Tôi đã bao gồm tệp .gif hoạt ảnh trong webapp khi đang chờ nội dung, nhưng tôi cần có cùng chức năng khi điều hướng trong nội dung gốc. Ví dụ, khi tôi nhấn một nút trong thanh tab, màn hình chỉ trống cho đến khi toàn bộ trang được tải.

Nó không cần phải là bất cứ điều gì ưa thích. Tôi thích cách này được giải quyết trong ứng dụng facebook với "bánh xe quay" khét tiếng.

Cảm ơn trước!

Trả lời

1

Tôi đoán nó phụ thuộc vào những gì đang được tải? Bạn đang chờ phản hồi từ máy chủ? Trong trường hợp đó tôi thường đặt một bánh xe quay (UIActivityIndicatorView) trên quan điểm của tôi có hộp kiểm ẩn khi không hoạt hình kiểm tra (có một thông báo để thiết lập này lập trình là tốt). Sau đó, khi dữ liệu được nhận từ máy chủ, tôi chỉ cần gọi stopAnimating trên khung nhìn UIActivityIndicator và nó sẽ ẩn. Sau đó, bạn có thể hiển thị bất cứ điều gì bạn cần hiển thị.

+0

Dường như chỉ là điều tôi đang tìm kiếm. Bạn có một số mã ví dụ về điều này? (Vẫn còn một chút gỉ trong Objective-C) –

+0

Nếu bạn có một bộ điều khiển xem trong xây dựng giao diện chỉ cần làm cho nó phân lớp lớp con UIViewController của riêng bạn. Sau đó thêm một IBOutlet UIActivityIndicatorView vào khung nhìn. giả sử chỉ số IBOutlet UIActivityIndicatorView; Sau đó bạn chỉ cần gọi [chỉ báo startAnimating] hoặc [indicator stopAnimating]; (Tôi nghĩ đó là tên phù hợp cho tin nhắn – jcb

+0

Ahh xin lỗi, tôi không chỉ định điều đó, nhưng tôi không sử dụng IB. Ứng dụng sắp hoàn tất, vì vậy tôi không muốn bắt đầu sử dụng nó tại thời điểm này :) –

3

Bạn có thể thêm một UIActivityIndicatorView để bất cứ quan điểm là "tải":

CGRect mainBounds = [[UIScreen mainScreen] bounds]; 
CGRect indicatorBounds = CGRectMake(mainBounds.size.width/2 - 12, 
    mainBounds.size.height/2 - 12, 24, 24); 
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] 
    initWithFrame:indicatorBounds]]; 
indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite; 
[indicator startAnimating]; 
[yourLoadingView addSubview:indicator]; 
+0

Tôi quản lý để thêm các chỉ số, nhưng thật đáng buồn không phải khi tôi phải. Những gì tôi đang cố gắng làm là làm cho chỉ báo này xuất hiện khi di chuyển từ trang này sang trang khác (khi tạo một ViewController mới và yêu cầu một trang mới với NSURLRequest). Tôi đã cố gắng để kiểm tra trên webView.loading và sau đó bắt đầu các hình ảnh động khi điều này là đúng, nhưng không có gì xảy ra. Màn hình vẫn chỉ trắng cho đến khi trang mới được tải (và có, tôi đã thử với màu nền để hiển thị) ... –

26

bạn có thể thêm một UIActivityIndicatorView như là một subview đến một cái nhìn và khi hành động đã qua, bạn có thể loại bỏ nó khỏi SuperView ...

UIActivityIndicatorView *av = [[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease]; 
av.frame=CGRectMake(145, 160, 25, 25); 
av.tag = 1; 
[yourView addSubview:av]; 
[av startAnimating]; 

loại bỏ nó

UIActivityIndicatorView *tmpimg = (UIActivityIndicatorView *)[yourView viewWithTag:1]; 
[tmpimg removeFromSuperview]; 

hy vọng nó sẽ giúp ...

+2

Nếu bạn muốn chỉ báo ở giữa chế độ xem hiện tại, bạn có thể thay đổi dòng thứ hai của mã này: 'av.frame = CGRectMake (vòng ((yourView.frame.size.width - 25)/2), tròn ((yourView.frame.size.height - 25)/2), 25, 25) ; ' – arlomedia

+2

Cách khác, để căn giữa ... [av setCenter: yourView.center]; –

1

Trên một ghi chú thẩm mỹ, chú ý rằng UIActivityIndicatorView đi kèm với một số kiểu tích hợp sẵn để bạn chọn. Các ví dụ mã ở trên sử dụng các tùy chọn Xám và Trắng, nhưng có một vài mô tả khác được mô tả trong tài liệu của Apple. Bạn có thể đặt kiểu bằng cách sử dụng:

-initWithActivityIndicatorStyle:(UIActivityIndicatorViewStyle) 

hoặc bằng cách đặt thuộc tính activityViewIndicatorStyle của đối tượng.

3

Ah-ha! Tôi vừa tình cờ gặp nhất lớp tiện dụng: MBProgressHUD. Hãy thử một lần. Tôi tin rằng nó làm những gì bạn tìm kiếm, và sau đó một số.

Tôi cũng đã đóng góp một vài bản sửa đổi trong bài đăng trên blog của tác giả.

+0

Cảm ơn bạn! Nó có vẻ khá hữu ích. Tôi sẽ thử ... –

4

vấn đề của bạn sẽ là chỉ số hoạt động sẽ không được hiển thị bởi vì nó sẽ chỉ được hiển thị trên đèo tiếp theo thông qua các vòng lặp chạy - theo thời gian mà bạn sẽ phải làm tất cả mọi thứ bạn cần!

Cách rất rất rất dễ nhất để làm điều này là để di chuyển mã của bạn để gọi quan điểm tiếp theo vào phương pháp riêng của mình sau đó (đã xây dựng một UIActivityIndicator theo bài viết khác ở đây) làm

 
[self.myactivityindicator startAnimating]; 
[self performSelector:@selector(myCodeToCallTheView) withObject:nil afterDelay:0]; 

này mang lại cho vừa đủ cơ hội để chỉ báo được vẽ trước khi chạy mã của bạn để vẽ chế độ xem. Tất nhiên một lần xem mới của bạn xuất hiện nó sẽ ghi đè lên bộ chọn.

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