我试图围绕存储在阵列中的图像的角落,但我不完全确定它是否可能?
var holeImages = [UIImage(named:"1.png"),UIImage(named:"2.png"),UIImage(named:"3.png")]
self.holeImages1.layer.cornerRadius = 10.0f;
答案 0 :(得分: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
的属性;而且,在没有上下文的情况下,图像的角落看起来很奇怪。通常在屏幕上显示图像时需要圆角,并且通常使用UIImageView
容器。所以,你可能更喜欢这个容器的圆角而不是图像:
let imageView = UIImageView()
imageView.layer.cornerRadius = 10
imageView.contentMode = .ScaleAspectFill
imageView.clipsToBounds = true
imageView.image = holeImages.first
答案 1 :(得分:0)
您可能只想将角半径应用于呈现图像的layer
的{{1}},而不是将图像自身舍入,例如:
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
}
}
不同)产生的问题,以及最小化创建单独的内存影响图像阵列。