Trước tiên, hãy thảo luận trường hợp không có hoạt ảnh.
Trước khi gọi present
:
- cửa sổ của bạn đã một cái nhìn hệ thống phân cấp, bắt đầu từ
rootViewController
quan điểm của mình.
Sau khi gọi present:
- Các hệ thống phân cấp view vẫn còn tồn tại mà không cần thay đổi.
- Chế độ xem toàn màn hình đặc biệt được gọi là "chế độ xem mờ" được thêm vào cửa sổ (nghĩa là không phải bên trong khung nhìn của
rootViewController
nhưng bên trong cửa sổ (cửa sổ cũng là UIView
). trình bày khiển và khối tương tác người dùng.
- các giới (modal) điều khiển của quan điểm sau đó được thêm vào cũng vào cửa sổ.
có một số quan điểm khác thêm vào ở giữa cửa sổ và cửa sổ điều khiển được trình bày của. Nếu bạn đăng nhập hệ thống phân cấp chế độ xem của bạn, bạn sẽ thấy các lớp có tên là _ControllerWrapperView
hoặc tương tự. Tuy nhiên, điều này đã thay đổi giữa các phiên bản iOS và bạn không nên dựa vào chế độ xem kết cấu. Lưu ý rằng bộ điều khiển phương thức không bao giờ có thể trong suốt vì nó không phải là chế độ xem trực tiếp của cửa sổ và các trình bao bọc giữa bộ điều khiển và cửa sổ không trong suốt.
Trường hợp hoạt ảnh gần như giống nhau. Chỉ có một số hình ảnh động ưa thích giữa các bước.
Chỉnh sửa 2: Câu trả lời thực sự không chính xác. Có một sự khác biệt lớn giữa bộ điều khiển trình bày iPhone và iPad.
Trên iPhone, bộ điều khiển được trình bày luôn hiển thị toàn màn hình và bộ điều khiển trình bày thực sự bị xóa khỏi cửa sổ.
Trên iPad, nếu bộ điều khiển được trình bày không ở chế độ toàn màn hình (xem UIModalPresentationStyle
), bộ điều khiển trình bày vẫn nằm trong cửa sổ.
câu hỏi của bạn:
Là trung bình cho đến khi cửa sổ modal là lên presentingViewController.view (self.view trong trường hợp nêu trên) được lấy ra từ các Xem hệ thống phân cấp và presentedViewController.view (myVC.view trong trường hợp trên) được thêm vào UIWindow?
Nếu bộ điều khiển ở chế độ toàn màn hình thì xác nhận quyền sở hữu này là đúng. Nếu không, bộ điều khiển xem trình bày vẫn ở đó nhưng toàn bộ nội dung bị chồng chéo bởi các khung nhìn khác (ngay cả khi chúng là nửa trong suốt). Ngoài ra, luôn có một số khung nhìn giữa khung nhìn trình bày và bộ điều khiển trình bày.
Điều gì sẽ xảy ra nếu myVC.modalPresentationStyle! = UIModalPresentationFullScreen?
Xem câu trả lời cho câu hỏi trước - trên iPhone, sẽ không có sự khác biệt.
iOS cũng có xóa tất cả các chế độ xem từ UIWindow ngoại trừ presentationViewController.view cho đến khi hộp thoại toàn màn hình có tối ưu hóa không? Nếu KHÔNG tại sao không?
Từ các thử nghiệm của tôi, chỉ bộ điều khiển trình bày được loại bỏ khỏi hệ thống phân cấp cửa sổ. Đây có lẽ là để tối ưu hóa hiệu suất vẽ. Đây là bộ điều khiển duy nhất mà hệ thống có thể xóa an toàn. Việc xóa bất kỳ chế độ xem nào khác có thể gây ra sự cố (ví dụ: các chế độ xem phải luôn hiển thị).
Edit: Nếu bạn muốn thực hiện một bộ điều khiển trong suốt, bạn có thể:
- Thêm xem trực tiếp đến hệ thống phân cấp tầm nhìn của bạn (hoặc để quan điểm của bộ điều khiển hoặc tới cửa sổ) với một hình ảnh động chuyển tiếp (
+[UIView transition...]
)
- Tương tự nhưng cũng thêm bộ điều khiển con vào bộ điều khiển của bạn.
'clippingVC' là gì? – rptwsthi