2014-12-16 14 views
9

Tôi chỉ đơn giản là cố gắng để tạo ra một hình ảnh hoàn hảo tròn. Đây là mã nhanh chóng của tôi:vấn đề với UIImageView.layer.cornerRadius để tạo ra hình ảnh tròn trên mật độ điểm ảnh khác nhau ios

myImage.layer.cornerRadius = myImage.frame.size.width/2 
myImage.layer.masksToBounds = true 

này hoạt động trên một 4s, nhưng không phải là khá tròn trên 5s, và xuất hiện như một hình chữ nhật tròn trên iphone 6.

Tôi giả định này đã làm với frame.size.width trả về các giá trị theo pixel không phải là điểm hoặc thứ gì đó như thế, nhưng tôi đã không thể giải quyết vấn đề này.

+1

Bạn đặt mã này ở đâu? Tôi tự hỏi nếu có lẽ đó là một vấn đề bố trí tự động và hình ảnh được kéo dài sau khi bạn đã thiết lập bán kính góc của nó một cách thích hợp ... Nếu nó trong 'viewDidLoad' ví dụ, hãy thử di chuyển nó sang' viewDidLayoutSubviews' –

Trả lời

23

Nếu bạn' đang đặt mã đó vào viewDidLoad, hãy thử di chuyển mã đó đến viewDidLayoutSubviews.

Tôi đoán đó là vấn đề bố cục tự động - mặc dù bạn đã sử dụng thuộc tính bán kính góc một cách thích hợp và thực tế là làm cho khung hình tròn, sau khi bố cục tự động, bán kính góc vẫn giữ nguyên, nhưng hình ảnh kéo dài để nó không còn tròn nữa.

+0

làm cách nào để hiển thị UIImage được làm tròn trong chế độ xem UICollection. Tôi đang tải hình ảnh trong hàm cellForItemAtIndexPath của collectionView từ api. – Dashrath

+1

@Dashrath Gọi yourCell.layoutIfNeeded() trước khi thiết lập các thuộc tính của lớp. –

+0

Tôi đã thêm cell.itemThumb.layer.cornerRadius = cell.itemThumb.frame.size.height/2; cell.itemThumb.clipsToBounds = true; cell.itemThumb.layoutIfNeeded(); nhưng hình ảnh vẫn hiển thị hình tròn ractangle. tôi đang thiếu một cái gì đó một lần nữa? – Dashrath

2

Vấn đề là nếu bạn thay đổi gócRadius của Chế độ xem bất kỳ và mong đợi nó trông giống như một vòng tròn, chế độ xem phải là hình vuông.

Bây giờ, do các thiết bị khác nhau và kích thước thiết bị khác nhau, kích thước của chế độ xem hình ảnh của bạn có thể thay đổi và có thể là hình chữ nhật.

Ví dụ: Nếu bạn xem là một 50 * 50

myImage.layer.cornerRadius = myImage.frame.size.width/2 

này sẽ thêm radio góc 25 trên cả hai mặt để làm cho nó một vòng tròn.

Nhưng vì bố trí tự động của sự thay đổi thiết bị, xem bạn có thể là một bán kính 50 * 80

Corner sẽ thêm một 25, nhưng như chiều cao là 80, nó sẽ bổ sung thêm 25 trên cả hai mặt, và số còn lại 30 sẽ không phải là một đường cong và nhìn thẳng.

Những gì bạn có thể làm là cố gắng xem màn hình theo nhiều hướng khác nhau trong các kịch bản và thay đổi chế bố trí tự động (Hoặc cấu trúc và suối) để đảm bảo rằng quan điểm hình ảnh là một hình vuông trong tất cả các thiết bị

+0

Nhưng OP không sử dụng kích thước khung nhìn.để đặt bán kính góc hình ảnh, do đó, đó không phải là vấn đề ... –

+0

Đồng ý, Bỏ qua điểm đó, đã thay đổi giải pháp. Cảm ơn. –

0

này nên làm việc:

myImage.layer.cornerRadius = myImage.**bounds**.size.width/2 
myImage.layer.masksToBounds = true 
1
override func viewDidLayoutSubviews() { 
super.viewDidLayoutSubviews() 

    myImage.layer.cornerRadius = myImage.frame.size.width/2 
    myImage.layer.masksToBounds = true 
} 
+0

Bạn nên thêm dòng 'super.viewDidLayoutSubviews() 'làm dòng đầu tiên trong hàm. – yesthisisjoe

2

Nếu mã của bạn trong viewDidLoad trong ViewController, hãy thử di chuyển nó đến viewDidLayoutSubviews.

Nếu hình ảnh được làm tròn của bạn nằm trong tableViewCell, hãy thử di chuyển nó đến draw.

override func draw(_ rect: CGRect) { 
    avatarView.layer.cornerRadius = avatarView.frame.size.width/2 
    avatarView.layer.masksToBounds = true 
    avatarView.clipsToBounds = true 
    avatarView.contentMode = .scaleAspectFill 
} 
Các vấn đề liên quan