2009-02-27 39 views
23

Tôi muốn hiển thị chỉ báo tiến trình trong một hộp nửa trong suốt nổi trên chế độ xem bảng. Nói cách khác, khi nội dung bảng đang được tải xuống, tôi muốn nhãn "Đang cập nhật" xuất hiện trên đó.Làm cách nào để hiển thị lớp phủ chỉ báo tiến trình/HUD trên iPhone?

Tôi đã thấy điều này trong một số ứng dụng trong cửa hàng, đặc biệt là Facebook (khi bạn lắc để tải lại) và Darkslide.

Xung đầu tiên của tôi là tạo UIView nửa trong suốt, đặt UILabel và UIProgressIndicatorView bên trong nó và thêm nó vào phân cấp khung nhìn ... nhưng ở đâu? Một UIView có thể không chồng chéo anh chị em của nó, vì vậy tôi không thể làm cho nó một subview của cửa sổ. Tôi cũng không thể biến nó thành chế độ xem phụ của bảng, vì sau đó nó sẽ cuộn lên xuống bằng nội dung bảng.

Tôi đã nghĩ đến việc tạo UIWindow mới, nhưng tài liệu về cơ bản nói không.

Tôi biết Calayers có thể chồng lên nhau, vì vậy đó sẽ là một lựa chọn, nhưng tôi không thể đặt chỉ báo tiến trình bên trong một CALayer, tôi có thể không? Tôi có nên cuộn chỉ báo tiến trình của riêng mình làm hoạt hình CALayer thay vì UIView không?

Tôi không muốn nghe về số private APIs.

Chỉnh sửa: Câu hỏi được dựa trên giả định bị lỗi. NSViews (trên Mac OS X) có thể không trùng lặp, nhưng UIViews trên iPhone có thể.

+0

Bạn có thể lưu yoursel f một số công việc bằng cách sử dụng [MBProgressHUD] (https://github.com/matej/MBProgressHUD) nếu nó đáp ứng nhu cầu của bạn. –

Trả lời

14

Bạn chắc chắn có thể chồng chéo các chế độ xem. Chỉ cần thêm lớp phủ trong suốt làm phần phụ trong bảngView.

Từ tài liệu UIView của:

đối tượng UIView được sắp xếp trong một đối tượng UIWindow, trong một hệ thống phân cấp lồng nhau của subviews. Đối tượng cha mẹ trong hệ thống phân cấp khung nhìn được gọi là superviews và trẻ em được gọi là các bản xem trước. Một đối tượng xem yêu cầu một vùng hình chữ nhật của superview kèm theo của nó, chịu trách nhiệm cho tất cả các bản vẽ trong vùng đó, và đủ điều kiện nhận các sự kiện xảy ra trong đó. Chế độ xem anh chị em có thể chồng lấp mà không có bất kỳ vấn đề nào, cho phép sắp xếp vị trí phức tạp.

+0

Trình tạo giao diện đã gây hiểu nhầm cho tôi! Tôi biết rằng NSViews không thể chồng lên nhau, và nếu bạn tạo UIViews chồng chéo trong IB, nó sẽ gắn cờ chúng với cảnh báo. Cảm ơn bạn đã đặt tôi thẳng. – benzado

1

Bất kỳ đối tượng nào sống trong MainWindow.xib của bạn đều có thể truy cập vào cửa sổ ứng dụng thông qua ổ cắm. Ứng dụng ủy nhiệm trong các dự án tiêu chuẩn đã có nó, nhưng có thể bạn sẽ muốn thêm ổ cắm vào bộ điều khiển xem của bạn cần hiển thị lớp phủ tiến trình.

Vì trong UIKit các UIWindow là một UIView (không giống như NSWindow vs NSView trong Cocoa), bạn chỉ có thể thêm quan điểm tiến bộ của bạn như là một subview của cửa sổ:

[window addSubview:progressView];

progressView sẽ bao gồm toàn bộ giao diện người dùng ứng dụng.

Ví dụ này sử dụng kỹ thuật này để làm mờ dần hình ảnh giật gân Default.png:

http://michael.burford.net/2008/11/fading-defaultpng-when-iphone-app.html


Với quan đến việc chỉnh sửa gần đây, tính đến hệ điều hành MacOS X 10.5 Leopard NSView chồng chéo là xác định (chúng luôn luôn có thể chồng chéo lên nhau, bạn chỉ có kết quả không xác định), mặc dù nó có một thứ tự khác nhau để tùy thuộc vào việc xem có chứa là lớp sao lưu hay không. Điều này rất có thể là một tác dụng phụ của việc tích hợp CALayers vào hệ điều hành OS X.

-1

Trả lời: Tài liệu của Apple khá tuyệt vời. http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

Hiện tại tôi đang đặt chế độ xem minh bạch hơn (ít nhất là ở mặt sau của khăn ăn tại thời điểm này). Bạn có thể sử dụng chúng để giữ các nút menu, di chuyển chúng trong không gian 3D, chỉ cần lấy hạt.

Ý tôi là đây là một đường tôn giáo hay cái gì? Nội dung tuyệt vời từ những người ở NEXT:

Các đối tượng UIView được sắp xếp trong một đối tượng UIWindow, trong phân cấp lồng nhau của các bản xem trước. Đối tượng cha mẹ trong hệ thống phân cấp khung nhìn được gọi là superviews và trẻ em được gọi là các bản xem trước. Một đối tượng xem yêu cầu một vùng hình chữ nhật của superview kèm theo của nó, chịu trách nhiệm cho tất cả các bản vẽ trong vùng đó, và đủ điều kiện nhận các sự kiện xảy ra trong đó. Chế độ xem anh chị em có thể chồng lấp mà không có bất kỳ vấn đề nào, cho phép sắp xếp vị trí phức tạp.

15

tôi vừa đăng một phiên bản HUD của tôi: https://github.com/y0n3l/LGViewHUD

bạn có thể nhận được kết quả này rất dễ dàng:

#import "LGViewHUD.h" 
.... 
LGViewHUD* hud = [LGViewHUD defaultHUD]; 
hud.activityIndicatorOn=YES; 
[email protected]"The longer...."; 
[email protected]"The better !"; 
[hud showInView:self.view]; 

enter image description here

Một khi nhiệm vụ được kết thúc, chỉ gọi số

[[LGViewHUD defaultHUD] hideWithAnimation:HUDAnimationHideFadeOut]; 

và đó là nó!

+0

Cảm ơn bạn vì giải pháp nguồn mở – shkschneider

+0

Cảm ơn bạn rất nhiều vì đã chia sẻ, điều này thật tuyệt vời! – kernix

9

Cũng có khá nổi tiếng MBProgressHUD & SVProgressHUD
Họ là những loại giống như @yonel 's HUD

Ví dụ

[SVProgressHUD show]; 
[SVProgressHUD dismiss]; 

SVProgressHUD Examples MBProgressHUD bây giờ có vẻ phổ biến hơn (nếu chúng ta dựa trên các ngôi sao github)

+1

SVProgress hoạt động rất tốt cho tôi. Nó có vẻ đơn giản nhưng linh hoạt. Lưu ý, sử dụng phiên bản 'đầu' cho khả năng tương thích với iOS 7. – Nick

+0

Có thể thêm hình ảnh vào vị trí của spinner trong SVProgressHUD không? – Ramakrishna

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