有什么方法可以在图层边缘周围实现边框图像(例如CSS边框图像)吗?

时间:2019-03-25 12:14:49

标签: ios xcode swift4.2

我想在Swift4.2中实现一个具有边框图像模式的图层,例如CSS,但是我不知道该怎么做。

我在香港应用商店中看到了一个名为“ PriPara”应用https://itunes.apple.com/sg/app/pripara/id1039257927?mt=8的应用,它具有一个UITabBar和一个UINavigationBar,它们具有复杂的轮廓和一些图像模式。如下:

Whole screenUITabBarUINavigationBar

UITabBar在其边框上具有类似花边的图像图案。 UINavigationBar的边框上有类似珠宝的图像。

我已经知道我可以通过修改CAShapeLayer类的“ path”属性来更改图层轮廓的形状,如网站上所说的https://medium.com/@philipp307/draw-a-custom-ios-tabbar-shape-27d298a7f4fa

但是,关于边框图像,我没有任何线索。尽管页面显示https://css-generator.net/border-image/时CSS似乎具有border-image属性,但是Swift没有。我是否必须使用一些外部库,还是没有办法实现?

1 个答案:

答案 0 :(得分:0)

我已经基本解决了这个问题。

我选择了使用简单图像的方法,如DonMag所说。也许这太简单了,但我能做到的。

它使用CAShapeLayer,UIBezierPath。

在原始UITabBarController子类中,执行以下代码:

let shapeLayer = CAShapeLayer()

//Get CGPath.Original Layer will be expanded lengthwise.
shapeLayer.path = self.createLengthExpandShape()

//Set image
shapeLayer.fillColor = UIColor.init(patternImage: UIImage.init(named: "MyImage.png")!).cgColor

//Set layer
self.tabBar.layer.insertSublayer(shapeLayer, at: 0)

最棘手的一点是UIImage.init(colorPattern :)。您可以使用此功能将图像设置为CAShapeLayer。图像文件在运行时倒置使用。因此,您必须事先用软涂料或类似材料将其翻转过来。另外,请注意,图像位于ORIGINAL(展开前)图层的左上角。如果您更改了扩展CAShapeLayer的方式,则还应该调整图像文件上的内容。

图像文件:https://i.imgur.com/BYnkuXQ

关于整个项目,请参见https://github.com/Satoru-PriChan/ChangeUITabBarAppearance

如果愿意,请在GitHub项目中单击Star。