我并没有任何关于在Swift中绘制的知识,但我期望创建与正方形略有不同的部分应用背景。见下图什么,我试图让:如何在Swift中创建独特的形状或UIViews
的想法是,这将坐在屏幕的顶部,而只不过是一个背景了。它会延伸到屏幕的一半。然后,我会在顶部添加一个图像等。我需要在广场底部的点始终坐在屏幕中间。
我可以通过代码在Swift中创建此形状/ UIView吗?如果是这样,怎么样?
或者,将它作为图像创建并做到这一点比较好吗?
我并没有任何关于在Swift中绘制的知识,但我期望创建与正方形略有不同的部分应用背景。见下图什么,我试图让:如何在Swift中创建独特的形状或UIViews
的想法是,这将坐在屏幕的顶部,而只不过是一个背景了。它会延伸到屏幕的一半。然后,我会在顶部添加一个图像等。我需要在广场底部的点始终坐在屏幕中间。
我可以通过代码在Swift中创建此形状/ UIView吗?如果是这样,怎么样?
或者,将它作为图像创建并做到这一点比较好吗?
我可以通过代码在Swift中创建此形状/ UIView吗?如果是这样,怎么样?
视图总是矩形的,但视图的内容可以是任何形状,它的背景可以是透明的,因此视图的可见部分可以是任何可以绘制的视图。
还有很多在iOS中绘制东西的方法。通常最好从最适合您的最高级别的工具开始,并在需要更多控制时降低到较低的级别。考虑到这一点,我建议先创建一个视图,使用UIBezierPath
绘制您的五角形。该代码,这是非常简单的:
class PentagonView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.clearColor()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
backgroundColor = UIColor.clearColor()
}
override func drawRect(rect: CGRect) {
let size = self.bounds.size
let h = size.height * 0.85 // adjust the multiplier to taste
// calculate the 5 points of the pentagon
let p1 = self.bounds.origin
let p2 = CGPoint(x:p1.x + size.width, y:p1.y)
let p3 = CGPoint(x:p2.x, y:p2.y + h)
let p4 = CGPoint(x:size.width/2, y:size.height)
let p5 = CGPoint(x:p1.x, y:h)
// create the path
let path = UIBezierPath()
path.moveToPoint(p1)
path.addLineToPoint(p2)
path.addLineToPoint(p3)
path.addLineToPoint(p4)
path.addLineToPoint(p5)
path.closePath()
// fill the path
UIColor.redColor().set()
path.fill()
}
}
如果你想一个150x150px PentagonView
坐标添加到您的视图控制器的主视图( 100,200),你可以把在viewDidLoad()
如下:
let pg = PentagonView(frame:CGRect(100, 200, 150, 150))
self.view.addSubview(pg)
或者,你还可以添加一个PentagonView
在你的故事板视图的一些通过在下降3210的大小,然后将其更改为PentagonView
。
或者,只是将其作为图像创建并以此种方式进行创建会更好吗?
如果你已经完全描述了你的需求,那么不,我不这么认为:图像本身可能比绘制它的代码大得多,以及我上面给出的代码将以您选择的任何尺寸工作。另一方面,如果您要添加大量复杂的细节,并且图像只需要以一种尺寸显示,那么在绘图程序中创建一次并将其存储为图像可能会更容易。就像我上面所说的那样,iOS中有很多绘图选项。你选择的应该由你的需求决定。
如果您从形状文件中将图像加载到UIImageView上,可能是最好的,尤其是如果它只是背景。然后,您可以将视图的底部限制到应用程序的中间位置。不过,您也可以对视图的CALayer属性进行一些调整,以实现您的效果。
使用图片时,您必须为不同的屏幕尺寸和分辨率维护资产的不同版本。这在代码中很容易完成,并完全避免了这个问题。 –
@NoahWitherspoon我会争辩说,像这样一个完全红色的形状可以合理地缩小,而Xcode本身没有太多的质量损失。 – MiddaPhofidda
解决此问题的最佳方法不是创建视图(UIView
),而是创建图层(CAShapeLayer
)。你可以从一个路径创建一个CAShapeLayer,从而用矢量描述你的形状(而不是位图)。
有很多关于CAShapeLayer的教程会告诉你实现这个的代码。
感谢您的支持!我可以理解每一步,感谢评论!我创建了一个新的.Swift文件,然后添加了代码,然后在VC的.Swift文件中,在'viewDidLoad'方法中,我添加了'let BG = PentagonView(frame:CGRect(origin:CGPoint(),size:CGSize宽度:250,高度:250)))' - 但是当我运行该应用程序,没有任何显示。 Xcode没有错误,只是没有显示。 – Nick89
@ Nick89对不起,如果这还不清楚 - 我在操场上面写了上面的代码,在那里你真的需要做的是看到结果是实例化视图。要在应用程序中使用,您需要在某处创建一个PentagonView实例,然后将其添加到视图层次结构中。要做到这一点,最简单的方法可能就是在您的故事板中的一个视图中放置一个“PentagonView”,如果您使用的话。 – Caleb
嗨,对不起,我没有遵循:(我从来没有做过任何绘制明智之前,所以努力如何设置这个。我将代码添加到一个名为'CreateShape.swift'的新文件,我需要添加它我的看法控制器,它有一个连接到它的文件,名为'mainVC.swift'。你能帮我在代码中告诉我如何设置它:我想用绘图做更多的事情,所以很想知道如何去做它!预先感谢 – Nick89