我有一种使用UIColor
patternImage
在视图中重复或平铺图像的方法:
view.backgroundColor = UIColor(patternImage: UIImage(named:imageName))
UIColor
patternImage
的默认行为是从左上角开始模式,结果如图1所示。
问题:
如何让UIColor
patternImage
始终从视图的正中心开始,向外图案化以显示图像2中显示的结果?
答案 0 :(得分:4)
这很有效。这是一种广义的方法,可以更广泛地应用,动态适应模式图像和不同高度和宽度的视图。它在问题中提供了所需的结果,并在不同的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)
答案 1 :(得分:0)
如果你的图像尺寸是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)将放置在视图的正中间。同样,您可以通过在视图的width
和height
中添加或减少视图的x
和y
来安排其他视图。希望这会帮助你。 :)
答案 2 :(得分:0)
我创建了可重用的类PatternView
,重用了@user4806509的想法。它确实是用于显示模式的嵌入式组件。另外,可以通过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)
}}