2015-02-13 20 views
8

Tôi có một cái nhìn hình ảnh mà tôi đang thực hiện các góc tròn trên bằng cách ghi đè sau trong lớp con của tôi:Phương thức nào được gọi trên UIView khi phương thức này được thay đổi kích thước bằng tính năng tự động điền?

-(void)setFrame:(CGRect)frame { 
    [super setFrame:frame]; 
    [self.layout setCornerRadius:frame.size.width/10.0]; 
} 

này hoạt động tuyệt vời cho màn hình hiển thị ban đầu của hình ảnh, nhưng nếu kích thước của hình ảnh thay đổi do để xoay thiết bị hoặc một số cơ chế khác, phương pháp này không được gọi để thực hiện thay đổi kích thước.

Tôi đang dùng autolayout và tôi muốn biết phương thức UIView (và do đó UIImageView) đang được gọi khi các ràng buộc của tôi thay đổi kích thước chế độ xem để tôi có thể tính toán lại bán kính góc của mình bất cứ khi nào thay đổi kích thước này diễn ra. Giả định của tôi (dường như sai) là hệ thống tự động trả lời được gọi là setFrame: để di chuyển/thay đổi kích thước chế độ xem nếu cần.

+1

Hãy thử đặt điều này trong 'layoutSubviews'. – Rob

+0

Đặt nó trong layoutSubviews hoạt động! Cảm ơn Rob. Vấn đề duy nhất tôi thấy là sự thay đổi đột ngột thay vì hoạt hình trơn tru, tạo ra hiệu ứng "nhấp nháy" khi hình ảnh được thay đổi kích thước từ lớn thành nhỏ và ngược lại. Tôi đã cố gắng đặt điều này trong drawRect: để xem nó có cho tôi một hình động trơn tru của các góc thay đổi kích thước, nhưng có vẻ như drawRect: thậm chí không được gọi (ít nhất là không có trong trình mô phỏng)! – Michael

+0

Hãy xem Tài liệu tham khảo lớp UIView: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/index.html#//apple_ref/doc/uid/TP40006816 Có là một khối cụ thể có tên là "Ghi chú Subclassing" có thể rất hữu ích cho bạn. – CarlesCF

Trả lời

6

Từ các tài liệu trên updateConstraints:

xem tùy chỉnh

đó thiết lập các ràng buộc mình nên làm như vậy bằng cách ghi đè phương pháp này

....

Trước khi bố trí được thực hiện, thực hiện lại updateConstraints sẽ được gọi, cho phép bạn xác minh rằng tất cả các ràng buộc cần thiết cho nội dung của bạn được đặt tại thời điểm khi thuộc tính của chế độ xem tùy chỉnh của bạn không thay đổi.

Hoặc từ các tài liệu trên layoutSubviews:

Bạn nên ghi đè phương pháp này chỉ khi hành vi autoresizing và hạn chế dựa trên các subviews không cung cấp các hành vi mà bạn muốn. Bạn có thể sử dụng triển khai của mình để đặt trực tiếp hình chữ nhật khung của các bản phụ đề của mình.

nhưng nếu bạn cần phải làm điều này trên những thay đổi luân phiên, hãy kiểm tra willTransitionToTraitCollection:withTransitionCoordinator:

implementors của phương pháp này có thể sử dụng nó để điều chỉnh giao diện dựa trên các giá trị trong tham số newCollection. Cách sử dụng phổ biến của phương pháp này là thực hiện thay đổi đối với kiểu trình bày cấp cao khi lớp kích thước hiện tại thay đổi.

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