iOS Swift矩形

时间:2017-02-27 11:04:49

标签: ios swift uibezierpath

我正在尝试将矩形形状(如图所示的曲线)添加到我现有的UIView中。

New Design

这是我实施的代码:

func drawRect(rect: CGRect) {

    let y:CGFloat = 20
    let curveTo:CGFloat = 0

    let myBezier = UIBezierPath()
    myBezier.move(to: CGPoint(x: 0, y: y))
    myBezier.addQuadCurve(to: CGPoint(x: rect.width, y: y), controlPoint: CGPoint(x: rect.width / 2, y: curveTo))
    myBezier.addLine(to: CGPoint(x: rect.width, y: rect.height))
    myBezier.addLine(to: CGPoint(x: 0, y: rect.height))
    myBezier.close()
    let context = UIGraphicsGetCurrentContext()
    context!.setLineWidth(4.0)
    UIColor.yellow.setFill()
    myBezier.fill()
}

只是试着让一个矩形路径出现,但是,当我在模拟器中打开它时什么都没有。我相信这是因为我的其他元素叠加在它上面这是正确的吗?我的完整代码是here

感谢您的帮助。

My View

enter image description here

2 个答案:

答案 0 :(得分:0)

查看你的代码。 UIViewController没有覆盖消息drawRect。您应该创建从UIView派生的自定义类,并在那里覆盖消息drawRect。

答案 1 :(得分:0)

这可以更加灵活,但它可能适合您的需求。如果它没有,那么它可能是你达到你想要的一个很好的起点。

如果您没有查看自定义组件/使用IBInspectable和IBDesignable对UIView进行子类化,这可能没有多大意义,所以您可能需要阅读一些内容:)

//
//  RoundedBottomImageView.swift
//  SW3IBDesign
//
//  Created by Don Mag on 2/27/17.
//  Copyright © 2017 DonMag. All rights reserved.
//

import UIKit

@IBDesignable

class RoundedBottomImageView: UIView {

    var imageView: UIImageView!

    @IBInspectable var image: UIImage? {
        didSet { self.imageView.image = image }
    }

    @IBInspectable var roundingValue: CGFloat = 0.0 {
        didSet {
            self.setNeedsLayout()
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        doMyInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        doMyInit()
    }

    func doMyInit() {

        imageView = UIImageView()
        imageView.backgroundColor = UIColor.red
        imageView.contentMode = UIViewContentMode.scaleToFill
        addSubview(imageView)

    }

    override func layoutSubviews() {
        super.layoutSubviews()
        imageView.frame = self.bounds

        let rect = self.bounds
        let y:CGFloat = rect.size.height - roundingValue
        let curveTo:CGFloat = rect.size.height

        let myBezier = UIBezierPath()
        myBezier.move(to: CGPoint(x: 0, y: y))
        myBezier.addQuadCurve(to: CGPoint(x: rect.width, y: y), controlPoint: CGPoint(x: rect.width / 2, y: curveTo))
        myBezier.addLine(to: CGPoint(x: rect.width, y: 0))
        myBezier.addLine(to: CGPoint(x: 0, y: 0))
        myBezier.close()

        let maskForPath = CAShapeLayer()
        maskForPath.path = myBezier.cgPath
        layer.mask = maskForPath

    }

}

示例应用:https://github.com/DonMag/IBDesignInspect

编辑:示例现在包含用于演示通过代码更改图像的按钮。

Edit2:示例应用程序现在有一个备用故事板,以显示图像如何"路径剪辑"不使用自定义子类。