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)
  }}

这不管用,但它让我重新审视我的数学,并创建了一个可以更广泛应用的通用方法。非常感谢。