2013-07-17 31 views
35

Tôi đang cố gắng tạo bộ điều khiển tương tự với Trung tâm điều khiển trong iOS7. Từ WWDC phiên # 226 Tôi đã học được làm thế nào để có được hình ảnh mờ với các hiệu ứng khác nhauHiệu ứng mờ ảo iOS 7 như trong Trung tâm điều khiển

UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0); 

[view drawViewHierarchyInRect:rect]; 

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

lightImage = [newImage applyLightEffect]; 

Vì vậy, nói cách khác, chúng ta chỉ cần chụp một số hình ảnh (chắc chụp màn hình), thực hiện hiệu ứng mờ ảo và sử dụng hình ảnh mờ này cho chúng tôi nhu cầu.

Nhưng nếu bạn mở trung tâm điều khiển phía trên một số nội dung động, bạn sẽ nhận thấy rằng nền mờ của trung tâm điều khiển đang thay đổi cũng như nội dung.

Có ai biết cách sao chép hành vi này không?

Cách duy nhất tôi nhìn thấy là chụp lại nội dung và tạo hiệu ứng mờ ảo với một số khoảng thời gian (ví dụ: nửa giây). Nhưng có vẻ dư thừa.

Trả lời

43

Dưới đây là giải pháp sẵn sàng mà tôi đã tìm thấy:

1. bất ngờ nhất: Sử dụng UIToolBar

- (id) initWithFrame:(CGRect)frame 
{ 
    if ((self = [super initWithFrame:frame])) 
    { 
     [self setup]; 
    } 
    return self; 
} 

- (id) initWithCoder:(NSCoder *)coder 
{ 
    if ((self = [super initWithCoder:coder])) 
    { 
     [self setup]; 
    } 
    return self; 
} 

- (void) setup 
{ 
    if (iOS7OrLater) 
    { 
     self.opaque = NO; 
     self.backgroundColor = [UIColor clearColor]; 

     UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:self.bounds]; 
     toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
     toolbar.barTintColor = self.tintColor; 
     [self insertSubview:toolbar atIndex:0]; 
    } 
} 

UIToolbar có thể được sử dụng cho nhu cầu này, bacuse nó có dựng- duy nhất của ông trong cơ chế mờ ảo, và cơ chế này là năng động, cái gì là tốt. Nhưng điều xấu là ở một số lý do nó bỏ qua màu sắc và làm cho nền trông irredeemably ...

Toolbar effect

Cập nhật:

Để tránh phá vỡ màu, không sử dụng barTintColor. Bạn cũng có thể thay đổi kiểu thanh công cụ nếu bạn muốn làm mờ kiểu tối (sử dụng UIBarStyleBlack).

2. FXBlurView.

Không giống như thanh công cụ nó tích cực hơn, nhưng cơ chế động của nó hiếm và thực tế nó chỉ có thể được sử dụng cho nền tĩnh. (động = NO).

FBBlurView effect

+3

Khi bạn đặt tông màu, làm mờ. Chỉ cần sử dụng thanh công cụ mặc định hoặc thanh công cụ có barStyle tối. Và xin vui lòng không sử dụng một FXBlurView trong chế độ năng động vì nó sẽ tiêu hao pin của người dùng nhanh hơn so với nó có thể làm mờ. –

+0

Cảm ơn, @FilipRadelic! Như bạn đã nói, tôi đã xóa tintColor và đặt UIBarStyleBlack cho thanh công cụ. Đó là năng động và bây giờ trông gần như hoàn hảo :). Tôi sẽ cập nhật câu trả lời của mình. –

+0

Bất kỳ ý tưởng nào nếu loại triển khai này sẽ dẫn đến việc bị từ chối bởi táo? Hay ngược lại, liệu họ sẽ ăn mừng cách tiếp cận sáng tạo? – YoCoh

0

Sử dụng thanh điều hướng để cung cấp làm mờ sẽ không hoạt động trên các thiết bị cũ chạy iOS 7. Khi họ đang chạy phiên bản nhẹ hơn của iOS 7 với hầu như không có t

12

Trong iOS8 chúng ta có thể thực hiện hiệu ứng mờ ảo trên quan điểm sử dụng UIVisualEffect lớp.

1

Bạn có thể sử dụng UIVisualEffect từ bảng phân cảnh.

Kéo hiệu ứng hình ảnh bằng Blur trên bảng phân cảnh. Hiệu ứng mong muốn có thể đạt được bằng cách thiết lập alpha của COLOR BACKGROUND. Các bản xem trước nên được thêm vào Chế độ xem của Hiệu ứng hình ảnh và chúng không bị ảnh hưởng bởi hiệu ứng nhòe nền.

Hiệu ứng rung phải được chọn trong tùy chọn Chế độ xem ở trên.

Xem hình ảnh:

7

Bạn có thể sử dụng mã dưới đây để áp dụng hiệu ứng mờ ảo trên xem.

UIVisualEffect *blurEffect; 
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; 

UIVisualEffectView *visualEffectView; 
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect]; 

visualEffectView.frame = MYview.bounds; 
[MYview addSubview:visualEffectView]; 
+0

Nó thực sự hoạt động! Giải pháp tuyệt vời :-) –

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