2009-05-04 10 views
16

Tài liệu nói rằng thuộc tính clipsToBounds của UIView sẽ cắt hình vẽ đến các giới hạn hoặc chính xác hơn là subView không thể vẽ ra ngoài giới hạn của superView.UIView clipsToBounds property: Liệu nó có cải thiện hiệu năng không?

Âm thanh tốt đẹp, nhưng điều đó có nghĩa là trong thực tế?

Nếu tôi đặt thành , thì subView sẽ tự động chỉ vẽ những phần không nằm ngoài giới hạn của superView. do đó, nó làm tăng hiệu suất tổng thể hoặc tôi vẫn phải đảm bảo rằng tôi không tạo bất kỳ chế độ xem nào không hiển thị, tức là bên trong một UIScrollView?

Trả lời

23

Tôi nghĩ đó là điều ngược lại: bật clipping đau hiệu suất vì nó có để thiết lập một clipping mask. Tôi mơ hồ nhớ đọc ở đâu đó, nhưng tôi không thể tìm thấy nó ngay bây giờ.

+2

Tôi nghĩ bạn nói đúng. Đơn giản chỉ cần đặt, hệ điều hành phải làm một cái gì đó để làm cho clipping xảy ra, do đó, nó đau hiệu suất. – Kriem

+2

nhưng bản thân việc cắt xén không phải là một điều mà hệ thống nói với bất kỳ phương pháp nào muốn vẽ ra ngoài giới hạn: "Này người đàn ông, đừng làm. Tiết kiệm thời gian của bạn, uống một tách trà. Không cần phải vẽ ở đây ! "? – Thanks

+0

Thực ra là vậy. Đằng sau hậu trường, hệ điều hành đang làm những công cụ giống như OpenGl, nơi nó phải quyết định nên vẽ cái gì. Quyết định yêu cầu chu kỳ CPU. – Kriem

0

The (có thể) đạt hiệu suất là chỉ xác định nếu bạn biết hệ thống phân cấp xem. Như đã đề cập ở trên, thường trình kết xuất sẽ sử dụng các chu kỳ GPU để vẽ chế độ xem UNLESS một số chế độ xem trong cấu trúc phân cấp sử dụng drawRect:. Điều này không ảnh hưởng đến ứng dụng OpenGL ES vì drawRect: bị bỏ qua trong loại ứng dụng này.

Từ hiểu biết của tôi, xác định và hiển thị các khu vực cắt bớt có thể mất chu kỳ ít hơn thực sự tính toán/vẽ/trộn toàn bộ xem. Kể từ OpenGL ES 2.0 cắt có thể được tính toán trong GPU.

1

Các trường hợp sử dụng cho clipsToBounds được nhiều hơn cho subviews mà là một phần bên ngoài giao diện chính. Ví dụ, tôi có một subview (tròn) trên cạnh của phụ huynh của nó (hình chữ nhật) UIView. Nếu bạn đặt clipToBounds thành YES, chỉ một nửa vòng kết nối/lượt xem phụ sẽ được hiển thị. Nếu được đặt thành KHÔNG, toàn bộ vòng tròn sẽ hiển thị. Chỉ cần gặp điều này vì vậy muốn chia sẻ.