Ios 如何在Swift中使用UIColor patternImage从中心平铺图像
我有一种使用Ios 如何在Swift中使用UIColor patternImage从中心平铺图像,ios,swift,uiimage,uicolor,Ios,Swift,Uiimage,Uicolor,我有一种使用UIColorpatternImage在视图中重复或平铺图像的方法: view.backgroundColor=UIColor(patternImage:UIImage(name:imageName)) UIColorpatternImage的默认行为是从左上角开始填充图案,结果如图1所示 问题: 如何使UIColorpatternImage始终从视图的中心开始,向外绘制图案,以获得如图2所示的结果? 如果图像大小为50*50,则可以执行类似操作 myView = UIVIew(
UIColor
patternImage
在视图中重复或平铺图像的方法:
view.backgroundColor=UIColor(patternImage:UIImage(name:imageName))
UIColor
patternImage
的默认行为是从左上角开始填充图案,结果如图1所示
问题:
如何使UIColor
patternImage
始终从视图的中心开始,向外绘制图案,以获得如图2所示的结果?
如果图像大小为50*50,则可以执行类似操作
myView = UIVIew(frame: CGRect(x: (self.view.frame.size.width/2)-25, y: (self.view.frame.size.height/2)-25, width: 50, height: 50))
所以这个视图(在你的例子中可能是imageview)将被放置在视图的正中间。像wise一样,您可以通过将视图的
宽度
和高度
添加或减去中心视图的x
和y
原点来排列其他视图。希望这对您有所帮助。:) 这是有效的。这是一种适用范围更广的通用方法,可动态适应不同高度和宽度的图案图像和视图。它给出了问题的预期结果,并在不同的iOS模拟器上进行了测试
view.backgroundColor = UIColor(patternImage: UIImage(named: "imageName")!)
view.bounds.origin.x = (UIImage(named: "imageName")!.size.width/2) - (view.bounds.size.width/2)
view.bounds.origin.y = (UIImage(named: "imageName")!.size.height/2) - (view.bounds.size.height/2)
我创建了可重用类
PatternView
,重用了的思想。这真的是一个显示模式的插件。另外,patternImage
可以通过Interface Builder
class PatternView: UIView {
@IBInspectable var patternImage: UIImage?
override func awakeFromNib() {
super.awakeFromNib()
self.setupBackgroundColor()
}
private func setupBackgroundColor() {
guard let patternImage = self.patternImage else {
return
}
self.backgroundColor = UIColor(patternImage: patternImage)
}
override func layoutSubviews() {
super.layoutSubviews()
self.centerPattern()
}
private func centerPattern() {
guard let patternSize = self.patternImage?.size,
patternSize.width > 0, patternSize.height > 0 else {
return
}
let x = -self.bounds.width.remainder(dividingBy: patternSize.width)/2
let y = -self.bounds.height.remainder(dividingBy: patternSize.height)/2
self.bounds.origin = CGPoint(x: x, y: y)
}}
这不管用,但它让我重新审视我的数学,并创建了一个可以更广泛应用的通用方法。非常感谢。