如何使用Swift中的UIColor patternImage从中心平铺图像

时间:2016-04-14 17:05:44

标签: ios swift uiimage uicolor

我有一种使用UIColor patternImage在视图中重复或平铺图像的方法:

view.backgroundColor = UIColor(patternImage: UIImage(named:imageName))

UIColor patternImage的默认行为是从左上角开始模式,结果如图1所示。

问题:

如何让UIColor patternImage始终从视图的正中心开始,向外图案化以显示图像2中显示的结果?

enter image description here

enter image description here

3 个答案:

答案 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)将放置在视图的正中间。同样,您可以通过在视图的widthheight中添加或减少视图的xy来安排其他视图。希望这会帮助你。 :)

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