我是iOS的新手,我正在尝试开发一个徒手绘图应用程序,使用uibezierPath
.is有一种计算或接收总线长度的方法,即使我绘制直线,曲线或圆形.我在touchmove方法上使用addline,我没有任何控制点.
我可以创建一个圆圈,但我需要它从“12:00”开始并达到一定的百分比。
let circlePath = UIBezierPath(arcCenter: CGPoint(x: 100,y: 100), radius: CGFloat(20), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)
let shapeLayer = CAShapeLayer()
shapeLayer.path = circlePath.CGPath
//change the fill color
shapeLayer.fillColor = UIColor.clearColor().CGColor
//you can change the stroke color
shapeLayer.strokeColor = UIColor.redColor().CGColor
//you can change the line width
shapeLayer.lineWidth = 3.0
cell.progress.layer.addSublayer(shapeLayer)
Run Code Online (Sandbox Code Playgroud) 在我的 ios swift 应用程序中,我有一个SVG
文件 - 它是地图标记的形状,现在我想用动画来绘制它。由于使用了pocketSVG
https://github.com/pocketsvg/PocketSVG/,我设法显示了绘图我的代码如下:
@IBOutlet weak var mainLogoView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let url = Bundle.main.url(forResource: "mainLogo", withExtension: "svg")!
//initialise a view that parses and renders an SVG file in the bundle:
let svgImageView = SVGImageView.init(contentsOf: url)
//scale the resulting image to fit the frame of the view, but
//maintain its aspect ratio:
svgImageView.contentMode = .scaleAspectFit
//layout the view:
svgImageView.translatesAutoresizingMaskIntoConstraints = false
mainLogoView.addSubview(svgImageView)
svgImageView.topAnchor.constraint(equalTo: mainLogoView.topAnchor).isActive = true
svgImageView.leftAnchor.constraint(equalTo: mainLogoView.leftAnchor).isActive = true …
Run Code Online (Sandbox Code Playgroud) 以下代码:
let size = CGSize(width: 200, height: 30)
let rect = CGRect(origin: .zero, size: size)
let path1 = UIBezierPath()
path1.move(to: CGPoint(x: 10, y: 5))
path1.addLine(to: CGPoint(x: 180, y: 5))
path1.addArc(withCenter: CGPoint(x: 180, y: 20), radius: 15,
startAngle: (3.14159 / 2), endAngle: (3 * 3.14159 / 2), clockwise: false)
Run Code Online (Sandbox Code Playgroud)
产生这个:
好吧,我错过了什么吗?我不想关闭这条路。我从不打电话path1.close()
。我想从弧的末端添加另一条直线,而不是从它的封闭版本。基本上,我不想关闭半圆,我该怎么做?
我有一个设计元素,无法弄清楚;希望有人可以指出正确的方向。我尝试构建的元素就是这样;
实际上,它是一个圆角矩形,在左侧,顶部和右侧都有笔触(底部应没有笔触)。
我涉猎了以下代码;
// Create the rounded rectangle
let maskPath = UIBezierPath(roundedRect: myView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 4.0, height: 4.0))
// Setup a shape layer
let shape = CAShapeLayer()
// Create the shape path
shape.path = maskPath.cgPath
// Apply the mask
myView.layer.mask = shape
Run Code Online (Sandbox Code Playgroud)
随后,我使用以下内容在矩形周围绘制笔触;
// Add border
let borderLayer = CAShapeLayer()
borderLayer.path = maskPath.cgPath
borderLayer.fillColor = UIColor.clear.cgColor
borderLayer.strokeColor = UIColor.white.cgColor
borderLayer.lineWidth = 2.0
borderLayer.frame = self.bounds
self.layer.addSublayer(borderLayer)
Run Code Online (Sandbox Code Playgroud)
这将产生以下图像;
我无法弄清楚如何使用UIBezierPath()删除底部笔画或绘制项目,但是以与舍入的rect相同的方式舍入拐角(我正在使用另一个舍入的rect)。相同的视图用于不同的目的,并且圆角必须相同)。
谢谢!
我正在使用UIBezierPath
和CAShapeLayer
绘制一条线并将其作为子层添加到视图中。一切工作正常,现在我必须调整“线”及其父视图的大小,并严格保持线与视图的比例相同。
下面是创建一条线的代码:
let line = UIBezierPath.arrow(from: startPoint, to: endPoint, tailWidth: 5, headWidth: 20, headLength: CGFloat(inputLength * 0.1))
let shapeLayer = CAShapeLayer()
shapeLayer.path = line .cgPath
self.view.layer.addSublayer(shapeLayer)
Run Code Online (Sandbox Code Playgroud) 我正在尝试绘制带有一些“曲线边缘”的 UIView。
它应该是这样的:
这是我得到的:
请注意右上角 (TR) 角如何与右下角 (BR) 不对称?BR 角与我想要实现的非常相似,但我无法使 TR 角正确对齐(以一堆不同的开始和结束角度播放)。
这是代码:
struct Constants {
static let cornerRadius: CGFloat = 15.0 // used for left-top and left-bottom curvature
static let rightTipWidth: CGFloat = 40.0 // the max. width for the right tip thingy
static let rightCornerRadius: CGFloat = 10.0 // the radius for the right tip
static let rightEdgeRadius: CGFloat = 10.0 // the radius for the top right and bottom right curvature
}
override func draw(_ rect: CGRect) …
Run Code Online (Sandbox Code Playgroud) 我知道有一些类似的问题,但就我而言,我想为我的图层设置cornerRadius = 8。
如果我设置:
shapeLayer.lineCap = CAShapeLayerLineCap.round
Run Code Online (Sandbox Code Playgroud)
它显示如下:
-> 与设计不匹配。
我的代码:
import Foundation
import UIKit
final class OnboardingCell: UICollectionViewCell {
@IBOutlet weak var boxView: UIView!
@IBOutlet weak var continueButton: UIButton!
@IBOutlet weak var progressView: UIView!
var onTap: (() -> Void)?
var levelProgress: CGFloat = 0.1 {
didSet {
fgLayer.strokeEnd = levelProgress
}
}
let bgLayer = CAShapeLayer()
let fgLayer = CAShapeLayer()
override func awakeFromNib() {
super.awakeFromNib()
setup()
configure()
}
override func layoutSubviews() {
super.layoutSubviews()
setupShapeLayer(shapeLayer: bgLayer)
setupShapeLayer(shapeLayer: fgLayer)
}
private …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用CABasicAnimation
关键路径但是对图层路径属性进行动画处理。没有得到准确的结果
我正在寻找的路径动画的变化如下
预期动画
注意:-请忽略开关..我的重点只是从动画circular
到moon
动画的路径变化
我尝试过什么
这是我尝试获取此路径转换动画的代码
@IBDesignable class CustomView: UIView {
private lazy var shapeLayer = CAShapeLayer()
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
private func commonInit() {
shapeLayer.frame = bounds
shapeLayer.fillColor = UIColor.black.cgColor
shapeLayer.strokeColor = UIColor.red.cgColor
shapeLayer.lineWidth = 3
layer.addSublayer(shapeLayer)
}
override func layoutSubviews() {
shapeLayer.path = drawSunShape(bounds)
}
private func drawSunShape(_ group:CGRect) -> CGPath {
let bezierPath = UIBezierPath()
let radius = …
Run Code Online (Sandbox Code Playgroud)