2016-07-29 2 views

ответ

0

Вы, вероятно, хотите просто применить радиус угла к layer в UIImageView, в котором вы представляете изображения, а не округление сами изображения, например,

imageView.layer.cornerRadius = 10 

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

let roundedHoleImages = holeImages.map { return $0?.rounded(cornerRadius: 10) } 

Где можно округлить изображения что-то вроде:

extension UIImage { 

    /// Round the corners of an image 
    /// 
    /// - parameter cornerRadius: The `CGFloat` corner radius to apply to the images. 
    /// 
    /// - returns: The rounded image. 

    func rounded(cornerRadius cornerRadius: CGFloat) -> UIImage? { 
     let path = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: size.width, height: size.height), cornerRadius: cornerRadius) 

     UIGraphicsBeginImageContextWithOptions(size, false, scale) 
     let context = UIGraphicsGetCurrentContext() 
     CGContextAddPath(context, path.CGPath) 
     CGContextClip(context) 
     drawAtPoint(CGPointZero) 
     let outputImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

     return outputImage 
    } 

} 

вы можете использовать это округление фактических изображений, если вы, например, загрузили изображения в некоторые веб-службы, и вы хотели загружать изображения с закругленными углами. Но, если нет, округление представлений изображений не только проще, но и избегает проблем, возникающих в результате изображений разных масштабов (особенно если эти масштабы отличаются от дисплея scale), а также минимизирует влияние памяти на создание отдельного массива изображений.

1

Нет, это невозможно. Если вы хотите применить какой-либо метод объекта для всех объектов в массиве, вы должны сделать это в цикле, так как Array типа, скорее всего, не имеют такой метод:

for image in holeImages { 
    image.performSomeMethod() 
} 

Также вы можете написать Array расширение, чтобы научить Array из объекты (UIImage, например) для этого метода:

extension Array where Element: UIImage { 
    func performSomeMethod() { 
     for element in self { 
      element.performSomeMethod() 
     } 
    } 
} 

, а затем вы можете сделать

holeImages.performSomeMethod() 

Но вернемся к вашему делу. UIImage тип не имеет собственности layer; кроме того, идея округления углов image выглядит странно без контекста. Обычно вам нужно окружать углы, когда вы представляете изображение на экране, и обычно для этого используется контейнер UIImageView. Таким образом, вы, вероятно, лучше, круглые углы этого контейнера вместо изображения:

let imageView = UIImageView() 
imageView.layer.cornerRadius = 10 
imageView.contentMode = .ScaleAspectFill 
imageView.clipsToBounds = true 
imageView.image = holeImages.first 
Смежные вопросы