Triangle UIView - Swift

前端 未结 5 1577
长情又很酷
长情又很酷 2020-12-05 06:43

So I\'m making a game in which I am dropping objects which have to be destroyed by a spike(triangle) at the bottom of the screen by a user.

I cannot work out how to

5条回答
  •  旧时难觅i
    2020-12-05 07:13

    Updated for 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()
        }
    }
    


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

    This will start from MinX, MaxY;
    Draw a line from the start to MaxX, MaxY;
    Draw a line from MaxX,MaxY to MaxX/2, MinY;
    Then close the path to the start location.

    The next part sets the color you want to use. In this example 255,127,0, Alpha 0.6 Then will fill the path you just drew above with the set color.

    Then in your View Controller

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


    Swift 2:

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

    However, this is going to cause the same problem as the frame of this view is still going to be a rectangle. UIKit works with rectangles, you would have to use another framework, like Sprite Kit.

提交回复
热议问题