因此,我正在制作一个游戏,其中我丢弃了必须由用户在屏幕底部的尖峰(三角形)破坏的对象。
我不知道如何制作一个三角形的UIView。但是我已经能够使其像这样的矩形工作:
let barrier = UIView(frame: CGRect(x:125, y: 650, width: 130, height:20)) barrier.backgroundColor = UIColor.orangeColor() view.addSubview(barrier)
这已经奏效了。但是我不知道如何制作一个三角形。我希望将其用作UIView的原因是因为im在其上使用了碰撞并让用户移动了它。我尝试了PNG三角形,但它会将碰撞检测为图像的边界,而不是三角形的起点。
我已经尝试过了,但是没有用…
let square = UIView(frame: CGPathMoveToPoint(path, nil, 50, 0), CGPathAddLineToPoint(path, nil, 100, 50), CGPathAddLineToPoint(path, nil, 0, 100)) square.backgroundColor = UIColor.purpleColor() view.addSubview(square)
任何帮助都将不胜感激,
谢谢,
亚历克斯
为 Swift 3 更新:
class TriangleView : UIView { override init(frame: CGRect) { super.init(frame: frame) } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } override func draw(_ rect: CGRect) { guard let context = UIGraphicsGetCurrentContext() else { return } context.beginPath() context.move(to: CGPoint(x: rect.minX, y: rect.maxY)) context.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY)) context.addLine(to: CGPoint(x: (rect.maxX / 2.0), y: rect.minY)) context.closePath() context.setFillColor(red: 1.0, green: 0.5, blue: 0.0, alpha: 0.60) context.fillPath() } }
斯威夫特2 :
import UIKit class TriangleView : UIView { override init(frame: CGRect) { super.init(frame: frame) } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } override func drawRect(rect: CGRect) { var ctx : CGContextRef = UIGraphicsGetCurrentContext() CGContextBeginPath(ctx) CGContextMoveToPoint(ctx, CGRectGetMinX(rect), CGRectGetMaxY(rect)) CGContextAddLineToPoint(ctx, CGRectGetMaxX(rect), CGRectGetMaxY(rect)) CGContextAddLineToPoint(ctx, (CGRectGetMaxX(rect)/2.0), CGRectGetMinY(rect)) CGContextClosePath(ctx) CGContextSetRGBFillColor(ctx, 1.0, 0.5, 0.0, 0.60); CGContextFillPath(ctx); } }
这将从MinX,MaxY开始; 从头开始画一条线到MaxX,MaxY; 从MaxX,MaxY到MaxX / 2,MinY画一条线; 然后关闭到起始位置的路径。
下一部分设置您要使用的颜色。在此示例中,255,127,0,Alpha 0.6然后将使用设置的颜色填充您刚才在上面绘制的路径。
然后在您的View Controller中
迅捷3 :
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let triangle = TriangleView(frame: CGRect(x: 10, y: 20, width: 25 , height: 30)) triangle.backgroundColor = .white view.addSubview(triangle) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let triangle = TriangleView(frame: CGRectMake(10, 20, 25, 30)) triangle.backgroundColor = .whiteColor() view.addSubview(triangle) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
但是,这将导致相同的问题,因为此视图的框架仍将是矩形。UIKit适用于矩形,您必须使用其他框架,例如Sprite Kit。