2014-08-30 3 views
34

Я хочу показать изображение в ImageView как контакт изображения (по кругу) Но когда я пытаюсь показать это, ImageView отмасштабировать его размер, и это не правильно показать в кругу ..Как установить изображение в круге как изображениеКонтакты в Swift правильно?

image.layer.borderWidth=1.0 
image.layer.masksToBounds = false 
image.layer.borderColor = UIColor.whiteColor().CGColor 
image.layer.cornerRadius = image.frame.size.height/2 
image.clipsToBounds = true 

I хочу показать, как это: enter image description here

Но я получаю это: enter image description here

Как сделать изображение изменения размера до размера UIImageView, чтобы показать, как круг?

Спасибо!

+0

здесь является решением случае ImageView было ширина отличается от высоты: http://stackoverflow.com/questions/29685055/ ios-frame-size-width-2-doesnt-production-a-circle-on-every-device – lee

ответ

28

frame размер вы используете для image? Я могу получить идеальный круг, если я установил рамку как квадрат.

let image = UIImageView(frame: CGRectMake(0, 0, 100, 100)) 
+0

мой размер изображения в инспекторе размеров установлен на 120 ширины и 120 высот, но когда я его запускаю, это не идеальный круг, потому что ширина оказывается немного длиннее? Зачем? –

+0

Если рамка представляет собой квадрат, установка радиуса на половину ширины/высоты всегда даст вам круговой обзор. Если вы создаете пользовательский класс, который может содержать различные квадратные размеры кадра, нельзя жестко задавать значение радиуса. – Mahouk

27

Это решение, которое я использовал в моем приложении:

var image: UIImage = UIImage(named: "imageName") 
imageView.layer.borderWidth = 1.0 
imageView.layer.masksToBounds = false 
imageView.layer.borderColor = UIColor.whiteColor().CGColor 
imageView.layer.cornerRadius = image.frame.size.width/2 
imageView.clipsToBounds = true 

Swift 4,0

let image = UIImage(named: "imageName") 
imageView.layer.borderWidth = 1.0 
imageView.layer.masksToBounds = false 
imageView.layer.borderColor = UIColor.white.cgColor 
imageView.layer.cornerRadius = image.frame.size.width/2 
imageView.clipsToBounds = true 
+0

Не могли бы вы сделать обновление для swift 3, пожалуйста? – Antonio

+0

Почему все ответы здесь так высоко - проголосовали так много? не так ли глупо использовать cornerRadius, изображение не обязательно должно быть квадратным? – Injectios

4

То есть все, что вам нужно ....

 profilepic = UIImageView(frame: CGRectMake(0, 0, self.view.bounds.width * 0.19 , self.view.bounds.height * 0.1)) 
     profilepic.layer.borderWidth = 1 
     profilepic.layer.masksToBounds = false 
     profilepic.layer.borderColor = UIColor.blackColor().CGColor 
     profilepic.layer.cornerRadius = profilepic.frame.height/2 
     profilepic.clipsToBounds = true 
     slider.addSubview(profilepic) 
+0

Вам нужно импортировать '' 'quartzcore''' для этого? – Supertecnoboff

+0

@Supertecnoboff nope.! –

3

Я бы предложил сделать ваш файл изображения идеальным квадратом, чтобы начать с , Это можно сделать практически в любой программе редактирования фотографий. После этого это должно работать в viewDidLoad. Кредит на этот video

image.layer.cornerRadius = image.frame.size.width/2 
image.clipsToBounds = true 
10

Быстрая и Простой решение.

Как с маскаUIImage Круг без обрезки с помощью Swift.

extension UIImageView { 
    public func maskCircle(anyImage: UIImage) { 
    self.contentMode = UIViewContentMode.ScaleAspectFill 
    self.layer.cornerRadius = self.frame.height/2 
    self.layer.masksToBounds = false 
    self.clipsToBounds = true 

    // make square(* must to make circle), 
    // resize(reduce the kilobyte) and 
    // fix rotation. 
    self.image = anyImage 
    } 
} 

Как звонить:

let anyAvatarImage:UIImage = UIImage(named: "avatar")! 
avatarImageView.maskCircle(anyAvatarImage) 
+1

Я не могу найти метод 'prepareImage()'. Изменилось ли это? – Antonio

+0

@ Антонио это его обычная функция ... вы просто используете self.image = anyImage –

+0

Я удалил дополнительную функцию. Спасибо @ Борис Николич – fatihyildizhan

0

Я установил, что делает изменения зрения:

  1. Перейти к вашему Main.storyboard
  2. Нажмите на изображении
  3. Вид -> Режим -> Аспект заполнения

Он отлично работает

0

Эта работа идеально подходит для меня. Порядок линий важно

func circularImage(photoImageView: UIImageView?) 
{ 
    photoImageView!.layer.frame = CGRectInset(photoImageView!.layer.frame, 0, 0) 
    photoImageView!.layer.borderColor = UIColor.grayColor().CGColor 
    photoImageView!.layer.cornerRadius = photoImageView!.frame.height/2 
    photoImageView!.layer.masksToBounds = false 
    photoImageView!.clipsToBounds = true 
    photoImageView!.layer.borderWidth = 0.5 
    photoImageView!.contentMode = UIViewContentMode.ScaleAspectFill 
} 

Как использовать:

@IBOutlet weak var photoImageView: UIImageView! 
    ... 
    ... 
    circularImage(photoImageView) 
0

, что я узнал, что ваша ширина и высота зрения изображения должна вернуть четное число при делении на 2, чтобы получить идеальный круг, например

let image = UIImageView(frame: CGRectMake(0, 0, 120, 120)) 

это не должно быть что-то вроде пусть изображение = UIImageVi ew (рамка: CGRectMake (0, 0, 130, 130))

-1
reviewerImage.layer.cornerRadius = reviewerImage.frame.size.width/2; 
reviewerImage.clipsToBounds = true 
0

Это также работает для меня. Для идеального результата круга используйте тот же размер для ширины и высоты. например image.frame = CGRect(0,0,200, 200)

Для не идеального круга ширина и высота не должны быть такими, как эти коды ниже.

image.frame = CGRect(0,0,200, 160) 
image.layer.borderColor = UIColor.whiteColor().CGColor 
image.layer.cornerRadius = image.frame.size.height/2 
image.layer.masksToBounds = false 
image.layer.clipsToBounds = true 
image.contentMode = .scaleAspectFill 
0

У меня был аналогичный результат (больше овального круга). Оказалось, что ограничения, установленные мною на UIImageView, заставили его овалом вместо круга. После того, как это было исправлено, эти решения работали.

1

Создайте свой пользовательский круг UIImageView и создайте круг под макетом. Subviews поможет, если вы используете Autolayout.

/* 
     +-------------+ 
     |    | 
     |    | 
     |    | 
     |    | 
     |    | 
     |    | 
     +-------------+ 
    The IMAGE MUST BE SQUARE 
*/ 
class roundImageView: UIImageView { 

    override init(frame: CGRect) { 
     // 1. setup any properties here 
     // 2. call super.init(frame:) 
     super.init(frame: frame) 
     // 3. Setup view from .xib file 
    } 

    required init?(coder aDecoder: NSCoder) { 
     // 1. setup any properties here 
     // 2. call super.init(coder:) 
     super.init(coder: aDecoder) 
     // 3. Setup view from .xib file 
    } 

    override func layoutSubviews() { 
     super.layoutSubviews() 
     self.layer.borderWidth = 1 
     self.layer.masksToBounds = false 
     self.layer.borderColor = UIColor.white.cgColor 
     self.layer.cornerRadius = self.frame.size.width/2 
     self.clipsToBounds = true 
    } 
} 
0

попробуйте это. быстр код

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(true) 
    perform(#selector(self.setCircleForImage(_:)), with: pickedImage, afterDelay: 0) 
} 


@objc func setCircleForImage(_ imageView : UIImageView){ 
    imageView.layer.cornerRadius = pickedImage.frame.size.width/2 
    imageView.clipsToBounds = true 
} 
0

Используйте этот код, чтобы сделать изображение круглого

 self.layoutIfNeeded() 
    self.imageView.layer.cornerRadius = 
    self.imageView.frame.width/2 
    self.imageView.layer.masksToBounds = true 
Смежные вопросы