2012-01-16 37 views
6

Ý tưởng là hiển thị hộp thoại tiến trình. Tôi đang cố gắng bao quát chế độ xem gốc (thường là toàn bộ màn hình) với chế độ xem màu đen trong suốt (alpha 0,2). Trên hết, tôi muốn hiển thị một cái nhìn nhỏ hơn, cũng trong suốt với một màu khác. Nó có thể không bị ảnh hưởng bởi màu sắc hoặc độ trong suốt của giao diện đầu tiên. Trong giao diện thứ 2, tôi muốn các phần tử giao diện người dùng bị mờ. Tôi đã thử tất cả mọi thứ và thậm chí tìm thấy các bài viết ở đây mà đối phó với một cái gì đó tương tự nhưng chỉ sử dụng một lớp trong suốt. Và những người đã sử dụng các thủ đoạn kỳ lạ. Có cách nào dễ dàng đạt được tiêu chuẩn này không?Chế độ xem trong suốt trên UIView trong suốt khác có nội dung không minh bạch?

Trả lời

3

Tôi tìm thấy một câu trả lời trong một blog: http://cocoawithlove.com/2009/04/showing-message-over-iphone-keyboard.html

Giải pháp là để ghi đè drawRect: và chăm sóc của alpha trong đó. Bạn không được chạm vào thuộc tính alpha UIView's, cũng như bạn không thể đặt màu nền của chế độ xem thành bất kỳ thứ gì nhưng trong suốt. Tất cả các bản vẽ phải được thực hiện trong drawRect:. Bằng cách này tôi đã có thể ngăn xếp các khung nhìn trong suốt và đặt các phần tử mờ trên đầu trang.

1

Việc thêm chế độ xem mờ của bạn làm chế độ xem phụ của chế độ xem trong suốt sẽ không hoạt động. Những gì tôi đã làm trong quá khứ là có một lớp học UIView bổ sung thêm một chế độ xem con trong suốt và một chế độ xem phụ mờ đục. Bằng cách đó, chế độ xem trong suốt sẽ không ảnh hưởng đến chế độ xem mờ.

9

Nếu không có bất kỳ hacking xung quanh hoặc phức tạp và có thể chậm tùy chỉnh drawRect:, đây là có thể nếu bạn nhóm quan điểm của bạn:

Tạo một cái nhìn ranh giới mà bao gồm và nắm giữ toàn bộ hộp thoại. Chế độ xem này không có nội dung hiển thị và màu nền của nó rõ ràng. Alpha của nó là 1.0.

Bây giờ, hãy thêm tất cả chế độ xem trong suốt (những người có alpha < 1) vào điều này mà bạn muốn và cũng thêm chế độ xem không trong suốt. Hãy cẩn thận không thêm bất kỳ chế độ xem không minh bạch nào dưới dạng các bản xem trước của các minh bạch, thay vào đó hãy thêm chúng dưới dạng các bản xem trước trực tiếp của chế độ xem giới hạn. Bằng cách đó, họ sẽ kế thừa alpha của nó là 1.0.

UIView *progressDialogView = [[UIView alloc] initWithFrame:dialogFrame]; 
progressDialogView.backgroundColor = [UIColor clearColor]; 
progressDialogView.alpha = 1.0; //you can leave this line out, since this is the default. 

UIView *halfTransparentBackgroundView = [[UIView alloc] initWithFrame:dialogFrame]; 
halfTransparentBackgroundView.backgroundColor = [UIColor blackColor]; //or whatever... 
halfTransparentBackgroundView.alpha = 0.5; 
[progressDialogView addSubview: halfTransparentBackgroundView]; 

UIView *progressBarView = [[UIView alloc] initWithFrame:progressBarFrame]; 
progressBarView.backgroundColor = [UIColor blueColor]; 
[progressDialogView addSubview: progressBarView]; 
+0

Tôi biết rằng "lừa". Nhưng nó sẽ trở nên khó khăn nếu bạn muốn một cái nhìn bán trong suốt trên đầu trang của một cái nhìn minh bạch hơn và các nút trên đầu trang của tất cả những gì là mờ đục. Vì vậy, tôi hài lòng với mã tôi tìm thấy trong blog mà tôi đã tham chiếu trong câu trả lời của riêng tôi. Nó không sử dụng giá trị Alpha chút nào. – Krumelur

+2

Làm thế nào nó trở nên phức tạp? Tôi nghĩ theo cách này, nó vẫn rất gọn gàng và dễ nắm bắt. – fzwo

+0

Phức tạp theo cách mà bạn sẽ luôn cần hai chế độ xem chỉ để có một chế độ xem minh bạch với nội dung không minh bạch ở trên cùng. Đó là lý do tại sao tôi thích giải pháp khác. – Krumelur

5

Thay vì thiết lập thuộc tính alpha, sử dụng sau đây để thiết lập màu nền/opacity cho mỗi view:

view1.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:.3]; 

Sử dụng bất cứ các giá trị mà bạn mong muốn cho màu đỏ, xanh lá cây, xanh dương, và alpha.

2

Tôi cần có chế độ xem trong suốt ở đầu chế độ xem khác. Quan điểm để làm cho minh bạch tôi chỉ làm:

self.alpha = 0.5; 

Ví dụ:

- (void) configureView 
{ 
    self.frame = CGRectMake(0, 0, 640, 960); 
    self.backgroundColor = [UIColor greyColor]; 
    self.alpha = 0.5; 
} 
Các vấn đề liên quan