2009-04-14 44 views
41

Mặc dù đã muộn trong đêm tối, tôi không hiểu vì sao có hai hình chữ nhật khác nhau: khung và giới hạn.Tại sao có hình chữ nhật khung và hình chữ nhật có viền trong UIView?

Như tôi đã hiểu, một hình chữ nhật đơn lẻ sẽ chỉ là điều khó khăn để làm mọi thứ. Định vị bản thân View tương ứng với một hệ tọa độ khác, và sau đó cắt nội dung của nó thành một kích thước được chỉ định. Bạn sẽ làm gì khác với hai hình chữ nhật? Và làm thế nào để họ tương tác với nhau?

Có ai có giải thích hay không? Một từ tài liệu táo với đứa trẻ cầm quả không phải là khá tốt cho sự hiểu biết.

Trả lời

82

Đây là cheatsheet:

  • frame là nơi xem
  • bounds là nơi xem được phép vẽ (đối với bản thân với) (đối với các SuperView với)

Làm rõ thêm:

Nếu bạn định vị khung nhìn trong phần giám sát của nó, bạn hầu như luôn thay đổi nguồn gốc khung hình.

Nếu bạn đang cắt nơi UIView đang vẽ, bạn hầu như luôn sửa đổi giới hạn của nó.

Lưu ý rằng bạn được phép có giới hạn lớn hơn khung. Đó là, bạn có thể vẽ "bên ngoài các dòng" của bạn đang ở đâu.

+0

do đó khung là một cái gì đó giống như một bắt đầu phối hợp liên quan đến hệ thống tọa độ superview, và từ đó bắt đầu điểm bounds clipping sẽ được thực hiện trong các tọa độ liên quan đến hệ tọa độ xem? – Thanks

+0

Tôi nhận thấy rằng giới hạn luôn có 0,0 điểm bắt đầu. Vì vậy, giới hạn luôn bắt đầu ở mức 0. Tôi có đúng không? –

+0

Nguồn gốc của giới hạn là 0,0. Nó không bắt buộc phải như vậy. – amattn

5

Khung nằm trong hệ tọa độ của người giám sát, các giới hạn nằm trong hệ tọa độ của chế độ xem. Theo quan điểm của tôi, đó là một sự thuận tiện để có cả hai. Khung có vẻ hữu ích hơn trong hai trường hợp, trừ khi có một số trường hợp tôi không biết vị trí của một chế độ xem phụ có thể có hệ tọa độ hoàn toàn khác (ví dụ: pixel được thu nhỏ khác) so với superview.

+0

Có. Nếu bạn thay đổi thuộc tính biến đổi của chế độ xem con, ví dụ bằng cách đặt vòng quay của nó, giới hạn của nó sẽ không thay đổi, nhưng hệ tọa độ của nó sẽ khác với hệ thống giám sát. – jdc

2

Tôi đã gặp khó khăn với giới hạn gần đây và đã thực hiện một số thử nghiệm. Thuộc tính giới hạn không giới hạn nơi UIView có thể vẽ, nhưng không giới hạn các bản xem phụ của nó. Các điều khiển giới hạn khác là sự kiện điều phối cảm ứng. Một cái nhìn sẽ không, như xa một tôi có thể nói, nhận được các sự kiện liên lạc được bên ngoài giới hạn của nó. Hơn nữa, bất kỳ chế độ xem phụ nào nằm ngoài giới hạn của chế độ xem gốc cũng sẽ không nhận được sự kiện chạm. Trong những tình huống này, bạn phải cập nhật khá tỉ mỉ các giới hạn của chế độ xem vùng chứa vì kích thước và vị trí của các thay đổi của nó thay đổi. Tất cả mọi thứ sẽ luôn luôn tốt đẹp (vì subviews không bị cắt bớt bởi giới hạn của cha mẹ của họ) nhưng chạm sẽ không nhận được.

(Điều này thực sự phải là câu trả lời cho bài đăng trước đó, nhưng vì tôi chưa thể trả lời, nó bị kẹt ở đây ...)

+2

UIViews có thuộc tính 'clipToBounds' sẽ ngăn subview của nó từ màu bên ngoài dòng. – amattn

+0

Nếu bạn ghi đè pointInside: withEvent, bạn có thể chặn các sự kiện chạm từ bên ngoài khung nhìn của bạn. Tuyệt vời để tạo các nút lớn hơn các nút xuất hiện. – kubi

+0

nếu bạn có biến đổi được áp dụng là sự kiện chạm được dịch ngược về hệ thống tọa độ giới hạn? – Sam

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