我正在尝试画一个酒吧。我已经设置了笔触颜色和填充颜色。虽然我用填充颜色设置路径,但它没有被填充。这段代码绘制了一个矩形。
blocks = yValue / yInterval; //Total number of blocks
divider = (self.bounds.size.height * 0.75 - 100)/ blocks ;//height for each block
float factor = value / yValue;
//NSLog(@"%f",factor);
int size = 40;
[[UIColor redColor] setFill];
[[UIColor redColor] setStroke];
UIBezierPath *path = [[UIBezierPath alloc]init];
CGPoint x1 = CGPointMake(0 + 100 + (index * size), self.bounds.size.height * 0.75);
CGPoint x2 = CGPointMake(x1.x + size,self.bounds.size.height * 0.75 );
// float height = (self.bounds.size.height * 0.75) - ((self.bounds.size.height * 0.75) * factor) + …
Run Code Online (Sandbox Code Playgroud) 我有 Objective C 应用程序。在 ViewController 中,我有一个 UIView,在这个视图中,我用 UIBezierPath 画了一个圆圈,代码如下:
CAShapeLayer* clockWiseLayer = [[CAShapeLayer alloc] init];
clockWiseLayer.path = [UIBezierPath bezierPathWithArcCenter:centerPoint
radius:radius
startAngle:startAngle
endAngle:endAngle
clockwise:YES].CGPath;
Run Code Online (Sandbox Code Playgroud)
然后我想知道部分的点中心或部分圆弧中心的半径中心是什么,如下所示:
我怎样才能得到这一点?如果我知道角度的终点、起点、半径大小,该点的值是多少?如何计算?
我有一个 [UIBezierPath] 类型的数组,我将其转换为 cgPaths,然后将其动画到我称为 shapeLayer 的 CAShapeLayer 上。现在由于某种原因我所有的路径都是颠倒的,所以所有的路径都被颠倒了。我该如何解决这个问题,我尝试了几种方法,但遗憾的是它们都不起作用......但是我确实弄清楚了如何扩展路径。这是我绘制 swiftPath 的代码,它是由函数 swiftBirdForm() 下的 Forms 类中找到的 UIBezierPaths 组成的路径。绘制路径工作正常,我只是不知道如何将其翻转 180 度。
@objc func drawForm() {
var swiftPath = Forms.swiftBirdForm()
let shapeLayer = CAShapeLayer()
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.strokeColor = UIColor.black.cgColor
shapeLayer.lineWidth = 1
shapeLayer.frame = CGRect(x: -120, y: 120, width: 350, height: 350)
var paths: [UIBezierPath] = swiftPath
guard let path = paths.first else {
return
}
paths.dropFirst()
.forEach {
path.append($0)
}
shapeLayer.transform = CATransform3DMakeScale(0.6, 0.6, 0)
shapeLayer.path = path.cgPath
self.view.layer.addSublayer(shapeLayer)
let strokeEndAnimation = …
Run Code Online (Sandbox Code Playgroud) 我在操场上创建了一个 uibezierpath 手动添加的值,它工作正常。结果是:
现在我的目标是平滑曲线并去除这些“尖”角。我正在考虑插值函数但不确定。在我的实际代码下面:
//: Playground - noun: a place where people can play
import Foundation
import UIKit
import CoreGraphics
import QuartzCore
class DemoView: UIView {
override func draw(_ rect: CGRect) {
let origin = CGPoint(x: frame.size.width / 2, y: frame.size.height / 2)
let radius = frame.size.width / 2
// self.createCircle(origin: origin, radius: radius)
self.addLinesInCircle(origin: origin, radius: radius)
}
func createCircle(origin: CGPoint, radius: CGFloat) {
let path = UIBezierPath()
path.addArc(withCenter: origin, radius: radius, startAngle: 0, endAngle: CGFloat(2 * Double.pi), clockwise: …
Run Code Online (Sandbox Code Playgroud) interpolation core-graphics uibezierpath swift swift-playground
我用阴影创建了线圆,但是当我尝试更改时shadowRadius
,阴影没有显示
let path = UIBezierPath(ovalIn: rect)
let shapeLayer = CAShapeLayer()
shapeLayer.path = path.cgPath
shapeLayer.fillColor = UIColor.clear.cgColor
shapeLayer.strokeColor = UIColor.white.cgColor
shapeLayer.lineWidth = 1
shapeLayer.shadowOpacity = 0.9
shapeLayer.shadowColor = UIColor.white.cgColor
shapeLayer.shadowOffset = .zero
shapeLayer.shadowRadius = 10.0
//shapeLayer.shadowPath = path.cgPath
layer.addSublayer(shapeLayer)
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗?
我正在尝试绘制类似于门票的形状-类似于下图。我只是对轮廓感兴趣,而对内部细节都不感兴趣。我知道可以通过创建一个自定义UIView
并覆盖该drawRect
方法来完成。我知道如何绘制简单的形状(如矩形),如下面的代码所示,但是在这种情况下,我不确定如何绘制曲线。
override func drawRect(rect: CGRect) {
let size = self.bounds.size
let p1 = self.bounds.origin
let p2 = CGPoint(x:p1.x + size.width, y:p1.y)
let p3 = CGPoint(x:p2.x, y:p2.y + size.height)
let p4 = CGPoint(x:p1.x, y:p1.y + size.height)
let path = UIBezierPath()
path.moveToPoint(p1)
path.addLineToPoint(p2)
path.addLineToPoint(p3)
path.addLineToPoint(p4)
path.closePath()
UIColor.blackColor().set()
path.fill()
}
Run Code Online (Sandbox Code Playgroud) 我有一个用于相机的图层,您可以在图 1 中看到,我需要像图 2 那样的圆角。我如何将其圆化。
if cornerRadius > cornerLength { cornerRadius = cornerLength }
if cornerLength > maskContainer.width / 2 { cornerLength = maskContainer.width / 2 }
let upperLeftPoint = CGPoint(x: maskContainer.minX, y: maskContainer.minY)
let upperLeftCorner = UIBezierPath()
upperLeftCorner.move(to: upperLeftPoint.offsetBy(dx: 0, dy: cornerLength))
upperLeftCorner.addArc(withCenter: upperLeftPoint.offsetBy(dx: cornerRadius, dy: cornerRadius),
radius: cornerRadius, startAngle: .pi, endAngle: 3 * .pi / 2, clockwise: true)
upperLeftCorner.addLine(to: upperLeftPoint.offsetBy(dx: cornerLength, dy: 0))
let combinedPath = CGMutablePath()
combinedPath.addPath(upperLeftCorner.cgPath)
Run Code Online (Sandbox Code Playgroud) 如何沿路径/ BezierCurve创建对象?换句话说,如何沿给定路径创建多个UIButton,沿同一路径给定间隔?
我看过很多关于移动物体的问题.但我需要一个实际创建它们的解决方案.
我想沿着路径前进并为每个X点/距离创建一个对象.像这样:
....@....@....@....@....
Run Code Online (Sandbox Code Playgroud)
在这种情况下,每4个点,获取位置,并在那里创建一个UIButton.
我正在试图弄清楚如何掩盖UIView以显示一个形状,该形状代表一个坐在其上的半圆形的正方形.
基本上,就像将边界半径仅应用于顶部两个角以将它们圆化并创建弧形.
我正在使用swift,这让我发疯了.
编辑:CornerRadius没有做我想要的.我觉得我必须使用CGShapeLayer,但我不确定如何创建弧.
EDIT3:
考虑解释我想要什么,提供图片,并解释我不理解我需要做什么,或者我需要做什么对某些人来说是不够的,这是我尝试过的:
尝试设置layer.cornerRadius
属性,同时将视图的底部推出屏幕以隐藏底角不会出现切断,这种类型的遮蔽太圆形并且没有提供正确的圆弧效果.
我尝试使用UIBezierPath
设置前两个角来使用视图的cornerRadii width / 2
.这也没有产生适当的结果.在尝试将值硬编码到cornerRadii中时,我注意到无论值如何,我似乎无法获得我想要的结果.
还有哪些其他选择?或者我只是错误地使用BezierPath?
编辑4:
这是我的原始代码.
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
let bezierPath = UIBezierPath(roundedRect: navBarView.bounds, byRoundingCorners: [.TopLeft, .TopRight], cornerRadii: CGSizeMake(navBarView.bounds.width / 2, navBarView.bounds.width / 2)).CGPath;
let shapeLayer = CAShapeLayer();
shapeLayer.bounds = navBarView.bounds
shapeLayer.path = bezierPath
navBarView.layer.mask = shapeLayer
updateUI() // <-- Label text, etc.
}
Run Code Online (Sandbox Code Playgroud)
此外,如前所述,曾尝试过 navBarView.layer.cornerRadius = x
我在许多方向和角度上都有线,我使用绘制了线UIBezierpath
。
我需要在这条线的一端画一个箭头。动态地根据给定的点。
编辑2:与杰克答案这是我的代码
let y2 = line.point2Y
let path = UIBezierPath()
path.move(to: CGPoint(x: x1, y: y1))
path.addLine(to: CGPoint(x: x2, y: y2))
path.addArrow(start: CGPoint(x: x1, y: y1), end: CGPoint(x: x2, y: y2), pointerLineLength: ...
path.close()
let shape = CAShapeLayer()
let shapeBorder = CAShapeLayer()
shapeBorder.strokeColor = UIColor.black.cgColor
shapeBorder.lineJoin = kCALineJoinRound
shapeBorder.lineCap = kCALineCapRound
shapeBorder.lineWidth = 10
shapeBorder.addSublayer(shape)
shape.path = path.cgPath
shapeBorder.path = shape.path
shape.lineJoin = kCALineJoinRound
shape.lineCap = kCALineCapRound
shape.lineWidth = shapeBorder.lineWidth-5.0
shape.strokeColor = color
Run Code Online (Sandbox Code Playgroud)
我正在尝试在这样的环中绘制圆形按钮。
我有 6 个 UI 按钮,它们的圆角半径都是 360 度,我试图在 Swift 中做的是将它们均匀地绘制在中心按钮/点周围,就像上图一样。每个圆与其相邻圆的间距相等。实现此功能的最佳方法是什么?我应该创建一条贝塞尔曲线,然后使用数学来绘制该曲线周围的按钮,还是您会建议其他方法?
附带说明的是,我并不是在寻找任何类型的径向菜单,不需要动画。我只是想按照上面的格式绘制现有的 UI 按钮。
谢谢!
嗨,我需要制作2D拱门.我在哪里遇到问题
arc.path=[UIBezierPath bezierPathWithArcCenter:CGPointMake(50, 100)
radius:80.0
startAngle:DEGREE(65)
endAngle:DEGREE(90)
clockwise:NO].CGPath;
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
Undefined symbols for architecture i386: "_DEGREE", referenced from:
我知道我没有包含一些头文件,我可以知道哪一个要包含?
uibezierpath ×12
ios ×9
swift ×7
cashapelayer ×4
objective-c ×3
cgpath ×1
cgpoint ×1
drawrect ×1
shadow ×1
swift3 ×1
uibutton ×1