ios - 贝塞尔路径重复设计

标签 ios swift uibezierpath bezier

我正在尝试在我制作的 UIView 容器上完成贝塞尔曲线路径设计,但是我似乎无法正确获取路径的大小以使图形与附加的示例应用程序一样大。这是我制作的贝塞尔路径,但它的尺寸太小,并且填充颜色(贝塞尔路径)没有填充为白色,而是填充为黑色。

enter image description here

这是我不会复制以将 UIImageView 放入其中的示例图像。

enter image description here

这是我到目前为止在我的容器中完成的代码:

import UIKit

class ProfileViewControllerNew: UIViewController/*, UIScrollViewDelegate, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout*/{

    // Properties
    var topContainer : UIScrollView = UIScrollView()
    var profileImage : UIImageView = UIImageView()
    var settingIcon : UIImageView = UIImageView()
    var shareIcon : UIImageView = UIImageView()
    var sessionScrollView : UIScrollView = UIScrollView()
    var scrollViewContainer : UICollectionView = {
        let layout = UICollectionViewFlowLayout()
        let cV = UICollectionView(frame: .zero, collectionViewLayout: layout)
        return cV
    }()
    var firstname : String!
    var location: UILabel!
    let layer = CAShapeLayer()
//    triangle view 
    var triangleView : UIView = UIView()


    override func viewDidLoad() {
        super.viewDidLoad()
//        setStatusBarBackgroundColor(color : UIColor.init(red: 49/255, green:  207/255, blue: 203/255, alpha: 1))
        self.view.backgroundColor = UIColor.init(red: 49/255, green:  207/255, blue: 203/255, alpha: 1)

        self.navigationController?.navigationBar.isHidden = false
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.isTranslucent = true
        self.navigationController?.navigationBar.barStyle = UIBarStyle.default;
        self.view.backgroundColor = UIColor.white

        addContaier()
        trView()
//        scrollViewSetup()
//        titleTextView()
//        imageView()
//        textViews()
//        iconsView()
//        

    }

    func addContaier(){
        // adding container to add image
        self.topContainer.backgroundColor = UIColor(red: 49/255, green:  207/255, blue: 203/255, alpha: 1)
        //        self.topContainer.backgroundColor = UIColor.white
        self.topContainer.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(self.topContainer)

        let myImage : UIImage = UIImage(named : "profile.jpeg")!
        let imageView : UIImageView = UIImageView()
        imageView.image = myImage
        imageView.frame = self.topContainer.bounds
        //imageView.contentMode = UIViewContentMode.scaleAspectFill

        //        self.topContainer.addSubview(imageView)
        self.topContainer.topAnchor.constraint(equalTo: view.topAnchor, constant : 0 ).isActive = true
        self.topContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        //self.topContainer.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true
        self.topContainer.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.55).isActive = true
        self.topContainer.widthAnchor.constraint(equalTo: view.widthAnchor).isActive =  true



        /*
         layer.path = UIBezierPath(roundedRect: CGRect(x: profileImage.frame.origin.x, y:profileImage.frame.origin.y , width: 30, height: 30), cornerRadius: 30).cgPath
         layer.fillColor = UIColor.red.cgColor

         self.topContainer.layer.addSublayer(layer)
         self.layer.addSublayer(<#T##layer: CALayer##CALayer#>)
         */

    }

    func trView(){


    let bezierPath = UIBezierPath()

        bezierPath.move(to : CGPoint(x:0,y: 462))
        bezierPath.addCurve(to :CGPoint(x:414,y: 226), controlPoint1: CGPoint(x:414.5,y: 230), controlPoint2: CGPoint(x:414.5,y: 226))
        bezierPath.addLine(to: CGPoint(x:414,y: 462))
        bezierPath.addLine(to: CGPoint(x:0,y: 462))
        UIColor.white.setFill()
        bezierPath.fill()
        bezierPath.lineWidth = 1
//        bezierPath.stroke()
//        bezierPath.close()
        //            path.lineCapStyle = kCGLineCapSquare
        let line = CAShapeLayer()
        line.path  = bezierPath.cgPath;

//        line.strokeColor = UIColor.black.cgColor
//        line.fillColor = UIColor.white.cgColor
        self.topContainer.layer.addSublayer(line)

}
}

有人能够帮助我复制相同的三角形 View 以将 UIImageView 添加到其中吗?

谢谢!

最佳答案

这是你想要的吗?这将沿对角线绘制一条线,并将其连接到其原点,从而将底部部分制成路径。

func initialSetup() {
    self.view.backgroundColor = UIColor.cyan
    let path = UIBezierPath()
    path.move(to: CGPoint(x: 0, y: self.view.center.y + 40))
    path.addLine(to: CGPoint(x: self.view.frame.size.width, y: self.view.center.y - 40))
    path.addLine(to: CGPoint(x: self.view.frame.size.width, y: self.view.frame.size.height))
    path.addLine(to: CGPoint(x: 0, y: self.view.frame.size.height))
    path.close()

    self.view.drawPolygon(path: path.cgPath)
}

func drawPolygon(path: CGPath) {
    let shapeLayer = CAShapeLayer()
    shapeLayer.path = path
    shapeLayer.lineWidth = 2.0
    shapeLayer.strokeColor = UIColor.white.cgColor
    shapeLayer.fillColor = UIColor.white.cgColor
    self.layer.addSublayer(shapeLayer)
}

关于ios - 贝塞尔路径重复设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41456755/

相关文章:

ios - 在 iOS 中以波形切割 View

objective-c - 对 UIBezierPath 应用缩放和平移转换

javascript - 在移动版 Safari 中隐藏/显示内联 SVG 时遇到问题

ios - 隐藏 UIStackview 的 subview 时自动布局冲突

ios - 如何为 UIButton 创建 BOOL 属性以进行选中选择

swift - 枚举中的方法在声明中不需要参数时要求参数

objective-c - iOS 钥匙串(keychain)问题。作为 SecItemCopyMatching() 的结果,SecKeyRef 始终为 null

swift - 我应该为 iOS 应用程序创建 Firestore 索引吗

swift - 如何在 Swift 程序中更新 SQLite 表中的列?

objective-c - UIBezierPath 相交