Trong chế độ xem chính của tôi, tôi thực hiện một số hành động cử chỉ khiến một số chế độ xem mới được hiển thị. Tại thời điểm này tôi muốn làm mờ toàn bộ nền (ngoại trừ chế độ xem mới này) làm thực hành giao diện người dùng tốt. Trong HTML, Javascript có vẻ như vậy - Làm thế nào để có được hiệu ứng tương tự trong iOS?Nền mờ của iOS khi chế độ xem được hiển thị
Trả lời
Lay một UIView trên nền, thiết lập nền tảng của nó để [UIColor blackColor]
và thiết lập Opacity của nó để thích 0.6. Sau đó thêm UIView vào chế độ xem gốc.
Điều này sẽ làm mờ nền và chặn bất kỳ thao tác nhấn nào vào điều khiển nền.
Trong khi đề xuất của Dan được nhắm mục tiêu, bạn không thể sử dụng bộ điều khiển chế độ xem trong trường hợp này vì một phương thức điển hình bao phủ toàn bộ màn hình, chặn bộ điều khiển chế độ xem gốc, ngay cả khi bạn có nền của chế độ xem trong suốt (bạn ' sẽ thấy bất cứ điều gì bạn có trong UIWindow của ứng dụng).
Nếu bạn đang thực hiện việc này trên iPad, có 2 kiểu trình bày phương thức (UIViewModalPresentationStylePageSheet
và UIViewModalPresentationStyleFormSheet
) có thể làm tương tự, nhưng những thứ này sẽ không hoạt động trên iPhone hoặc iPod Touch.
Thêm chế độ xem "bóng", với nền tối và độ mờ một phần và bất kỳ chế độ xem nào bạn muốn ở nền trước, trực tiếp vào chế độ xem của trình điều khiển chế độ xem. Bạn có thể tạo ảnh động cho họ bằng cách sử dụng các khối hoạt ảnh chuẩn UIView hoặc CoreAnimation.
Một lưu ý khác, nếu bạn muốn chặn chạm vào chế độ xem bóng đó, bạn có thể biến nó thành nút khổng lồ, phân lớp UIView để ghi đè một trong các phương pháp chạm như touchesEnded:
hoặc thay đổi nó thành UIControl. UIButton, nhưng không có tùy chọn bổ sung cho văn bản, bóng tối, tiểu bang, v.v.
Bạn nói đúng rằng tôi đã nói "phương thức" trong câu trả lời của tôi. Tôi đã không thực sự có nghĩa là một cái nhìn "trình bày một cách khiêm tốn" trong bất kỳ cách thức chính thức nào. Bạn đang xây dựng chế độ xem phương thức của riêng mình, về cơ bản. –
Hai câu trả lời trên hoạt động nếu chế độ xem mới có 'nền' riêng, nghĩa là không có độ trong suốt. Vấn đề dẫn tôi đến đây không thể được giải quyết theo cách đó, những gì tôi đang cố gắng làm là: Tôi đang chạy AVCaptureSession
trên màn hình của mình với thông thường AVCaptureVideoPreviewLayer
để hiển thị video theo thời gian thực. Tôi muốn chọn một phần của màn hình (để sau đó làm một cái gì đó chỉ với phần này), và khi phần này được chọn muốn làm mờ phần còn lại của xem trước video. Đây là những gì nó trông giống như:
Đây là cách tôi giải quyết này: Một quan điểm mới được tạo ra tùy thuộc vào nơi màn hình được chạm vào và thêm vào như là một subview của xem xem trước video. Sau đó, tôi tạo thêm 4 phần phụ hình chữ nhật bổ sung, không chồng chéo với màu nền và độ mờ đục được đề cập trước đây để che phần còn lại của màn hình. Tôi rõ ràng cần tất cả các chế độ xem này không phải là các bản xem trước của chế độ xem chính vì tôi cần khả năng chạm vào màn hình ở một nơi khác và thay đổi khu vực đã chọn.
Tôi chắc chắn có nhiều cách thanh lịch hơn để giải quyết vấn đề này, vì vậy nếu ai đó biết cách xin vui lòng nhận xét ...
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController<UIGestureRecognizerDelegate>
{
UIView *mainView;
UIView *dimBackgroundUIView;
UIView *customView;
UIButton *btn;
}
@end
#import "ViewController.h"
@interface ViewController()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
mainView = [[UIView alloc] init];
mainView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:mainView];
[self addConstraintsForMainView];
btn = [[UIButton alloc] initWithFrame:CGRectMake(200, 200, 100, 30)];
[btn setTitle:@"Button" forState:UIControlStateNormal];
[btn setBackgroundColor:[UIColor blueColor]];
[btn addTarget:self action:@selector(showCustomView_Action:) forControlEvents:UIControlEventTouchUpInside];
[mainView addSubview:btn];
dimBackgroundUIView = [[UIView alloc] init];
dimBackgroundUIView.backgroundColor = [UIColor blackColor];
dimBackgroundUIView.alpha = 0.2;
}
-(void)removeCustomViewsFromSuperView {
if(dimBackgroundUIView)
[dimBackgroundUIView removeFromSuperview];
if(customView)
[customView removeFromSuperview];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)showCustomView_Action:(id)sender {
customView = [[UIView alloc] initWithFrame:CGRectMake(100, 200, 80, 80)];
customView.backgroundColor = [UIColor redColor];
[self.view addSubview:dimBackgroundUIView];
[self addConstraintsForDimView];
[self.view addSubview:customView];
UITapGestureRecognizer *tapped = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(removeCustomViewsFromSuperView)];
tapped.delegate=self;
tapped.numberOfTapsRequired = 1;
[customView addGestureRecognizer:tapped];
}
-(void) addConstraintsForDimView {
[dimBackgroundUIView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:dimBackgroundUIView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1 constant:0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:dimBackgroundUIView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1 constant:0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:dimBackgroundUIView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:dimBackgroundUIView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:0]];
}
-(void) addConstraintsForMainView {
[mainView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:mainView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1 constant:0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:mainView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1 constant:0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:mainView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:mainView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:0]];
}
@end
lưu ý: bạn có thể tối ưu hóa mã bằng cách sử dụng giao diện đồ họa trên Xcode nhưng tôi đã phải viết mã lập trình để có thể kiểm tra nó
để ý tưởng là:
- tạo UIView đặt tên cho thứ bạn muốn (dimBackgroundUIView) so với đặt màu nền là Đen và đặt alfa thành 0,1 hoặc 0,2 hoặc ....
- thêm 2 dòng mã này khi bạn cần làm mờ nền: [self.view addSubview: dimBackgroundUIView]; [tự thêmConstraintsForDimView];
- và thêm 2 dòng mã này khi bạn muốn xóa nền mờ : if (dimBackgroundUIView) [dimBackgroundUIView removeFromSuperview];
- 1. Làm cách nào để làm mờ chế độ xem mặt sau khi Chế độ xem tùy chỉnh được hiển thị
- 2. Cách tìm Chiều rộng của chế độ xem trước khi chế độ xem được hiển thị?
- 3. Chế độ nền iOS
- 4. Hiển thị chế độ xem từ chế độ không xem/chế độ xem trong mvvmcross
- 5. hiển thị định nghĩa chế độ xem
- 6. Tải xuống hình ảnh ở chế độ nền trong khi hiển thị danh sách xem
- 7. iOS - Phát hiện UITableViewCell đang được di chuyển ra khỏi chế độ xem hiển thị?
- 8. Chế độ xem và hiển thị
- 9. Chế độ xem hiển thị Android GONE
- 10. Hiển thị chế độ xem của bộ điều khiển khác
- 11. Ẩn chế độ xem trong Trình quản lý vùng, khi một chế độ xem khác được hiển thị
- 12. AngularJs: Chạy Chỉ thị sau khi Chế độ xem được hiển thị hoàn toàn
- 13. Android - Nhận diện tích hiển thị của chế độ xem?
- 14. Ember.js - Hiển thị chế độ xem phương thức với URL và chế độ xem gốc vẫn hiển thị
- 15. Đặt hình nền/chế độ xem thành chế độ xem trực tiếp của máy ảnh?
- 16. UIBarButtonItem với chế độ xem tùy chỉnh không hiển thị sau khi xem lần đầu tiên
- 17. Hiển thị thanh tiến trình trong khi loại trực tiếp đang hiển thị chế độ xem
- 18. UIView bringSubviewToFront: không * không * hiển thị chế độ xem trước
- 19. Chế độ xem hiển thị ở chế độ xem cuộn trên màn hình
- 20. Chế độ xem trong Nhóm tùy chỉnh Chế độ xem không hiển thị
- 21. Yêu cầu HTTP iOS trong khi ở chế độ nền
- 22. iOS - Chế độ xem IB
- 23. Chế độ xem xóa iOS
- 24. Android - Cần gọi lại khi Chế độ xem được hiển thị
- 25. Bật chế độ xem đăng nhập trước khi trình điều khiển thanh tab được hiển thị
- 26. Chế độ xem đầu vào của UITextView trên iOS 7
- 27. Django, hiển thị chế độ xem ở chế độ xem khác?
- 28. 100% độ mờ đục UILabel trên nền mờ 50% (UIView?)
- 29. Hiển thị một phần Chế độ xem bằng ajax
- 30. Chế độ xem Android mờ dần theo chương trình
Bạn có thể thực hiện bố cục đó trong trình tạo giao diện, sau đó chỉ ẩn theo chương trình cho đến khi bạn muốn? Hoặc sẽ bằng cách nào đó can thiệp ngay cả khi bị ẩn? – ToolmakerSteve