我们如何UIBezierPath
从Glyph
iOS SDK中使用角色获取.
我已经完成了这个,但它显示双线,我只想要单线..
因为我是这项研究的新手.请帮我解决这个问题..我不想要任何代码,但想得到你的参考..
其实我想UIBezierPath
描述每个字母字母的形状..
提前致谢..
我正在为iPhone创建一个拼图益智游戏.
在这里,我必须像下图一样裁剪图像
谷歌搜索后,我开始知道uibezier路径是以不规则形状裁剪图像的最佳路径.
但我没有得到任何代码或想法如何裁剪像上面的图像.
我画了一些线条,我注意到当边缘达到某个角度时,它会产生一个像这样的尖锐边缘:
我想要它绘制:
我该怎么做呢?我查看了文档,但我似乎找不到任何我正在寻找的东西.或者有没有办法将自动边缘生成关闭?
我的困境与这个SO线程中描述的困境非常相似.我阅读了该主题的每个答案,但无法找到解决我问题的任何答案.我已经将我的问题缩小到下面函数内的4行.4行中的每一行都输出了几行错误,我在下面列出了所有错误(我删除了重复项).
我试过移动[path closePath];
到这4行以下,但它没有改变任何东西.我还在第一行之前设置了一个断点,并逐行手动完成了这个功能,而这只是造成严重破坏的4行.
对于这个问题似乎是一个趋势,一切都完全按照它应该呈现,但它充斥着控制台与这些类型的消息.
任何帮助将不胜感激,我很乐意提供更多信息和更新.
功能:
-(CAShapeLayer *)lineBetweenPoint:(CGPoint)start andPoint:(CGPoint)end {
//Draw the first circle
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:start radius:kLineEndRadius startAngle:0 endAngle:DEGREES_TO_RADIANS(360) clockwise:TRUE];
//Add the line
[path moveToPoint:start];
[path addLineToPoint:end];
[path moveToPoint:end];
//Draw the second circle
[path addArcWithCenter:end radius:kLineEndRadius startAngle:0 endAngle:DEGREES_TO_RADIANS(360) clockwise:TRUE];
//Close the path and set the coloring
[path closePath];
/*The following 4 lines cause problems*/
[[UIColor blueColor] setStroke]; /*CAUSES PROBLEM*/
[[UIColor blueColor] setFill]; /*CAUSES PROBLEM*/
[path stroke]; /*CAUSES PROBLEM*/
[path fill]; /*CAUSES PROBLEM*/
//Create …
Run Code Online (Sandbox Code Playgroud) 我通过以下方式绘制了上面的BezierPath://位置是用户触摸屏幕的位置.//位置将是CGPoint origin = CGPointMake(xStart,620.0)的最大值; CGPoint endpt = CGPointMake(xEnd,620.0); CGPoint midpt1 = midPointForPoints(原点,位置); CGPoint midpt2 = midPointForPoints(location,endpt);
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:origin];
[path addQuadCurveToPoint:location controlPoint:CGPointMake(midpt1.x, midpt1.y+50)];
[path addQuadCurveToPoint:endpt controlPoint:CGPointMake(midpt2.x, midpt2.y+50)];
[shapeLayer setPath:path.CGPath];
Run Code Online (Sandbox Code Playgroud)
现在,我想检索位于路径上的某些x坐标的y坐标.例如,给定x = 0.0,我想得到y = 0.0,或者给定x = 300.0,y = 50.0.
我看了一些像这个问题和示例代码的参考文献,我仍然不确定.更新:基本上,我想做这样的事情.
更新:关注 @ Fang的建议:
给出等式
X = (1-t)^2*X0 + 2*t*(1-t)*X1 + t^2 *X2
Run Code Online (Sandbox Code Playgroud)
我解决了
t = ((2.0 * x0 - x1) + sqrt(((-2.0 * x0 + x1) ** 2.0)
- ((4 * (x0 - …
Run Code Online (Sandbox Code Playgroud) 我知道有一种绘制圆形的方法 - UIBezierPath(roundedRect, cornerRadius)
但是我想知道如果我自己剪辑角落,为什么我必须在绘制矩形之前添加剪辑?(我觉得在绘制之后剪切矩形更合理.我错过了什么概念?)
(1)工作
override func drawRect(rect: CGRect) {
var clipPath = UIBezierPath(roundedRect: rect, cornerRadius: 8.0)
path.addClip()
var rectPath = UIBezierPath(rect: rect)
UIColor.redColor().setFill()
rectPath.fill()
}
Run Code Online (Sandbox Code Playgroud)
(2)不工作
override func drawRect(rect: CGRect) {
var rectPath = UIBezierPath(rect: rect)
UIColor.redColor().setFill()
rectPath.fill()
var clipPath = UIBezierPath(roundedRect: rect, cornerRadius: 8.0)
path.addClip()
}
Run Code Online (Sandbox Code Playgroud) 我做了一个圆圈路径,圆圈路径的中心位于视图的中间.然后,我做了一个只能在圆圈路径上移动的球(至少这是我想要的):
我做了一个函数,无论我在哪里拖动它都会移动球(仅限于圆形路径),但出于某种原因,每当我拖动它时,它就会变得疯狂并且不会移动,因为我希望它移动.
到目前为止这是我的代码:
class ViewController: UIViewController {
var midViewX = CGFloat()
var midViewY = CGFloat()
var circlePath2 = UIBezierPath()
var shapeLayer2 = CAShapeLayer()
override func viewDidLoad() {
super.viewDidLoad()
midViewX = view.frame.midX
midViewY = view.frame.midY
// Do any additional setup after loading the view, typically from a nib.
let circlePath = UIBezierPath(arcCenter: CGPoint(x: midViewX,y: midViewY), radius: CGFloat(100), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true)
let shapeLayer = CAShapeLayer()
shapeLayer.path = circlePath.CGPath
shapeLayer.fillColor = UIColor.clearColor().CGColor
shapeLayer.strokeColor = UIColor.redColor().CGColor
shapeLayer.lineWidth = 3.0
view.layer.addSublayer(shapeLayer) …
Run Code Online (Sandbox Code Playgroud) 我可以UIBezierPath
使用任何选定的字体和大小生成字符.现在我想在bezier路径之间做一条蚀刻线.我可以获得bezier路径的中心点吗?或者我可以制作中心虚线并沿着那条路走的任何其他方式?
这是我如何做的代码
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 568, 568) cornerRadius:0];
UIBezierPath *circlePath = [self createArcPath];
[path appendPath:circlePath];
[path setUsesEvenOddFillRule:YES];
shapeView = [CAShapeLayer layer];
shapeView.geometryFlipped = false;
shapeView.path = path.CGPath;
shapeView.fillRule = kCAFillRuleEvenOdd;
shapeView.fillColor = [UIColor grayColor].CGColor;
shapeView.opacity = 1.0;
shapeView.lineDashPattern = @[@2, @3];
[self.view.layer addSublayer:shapeView];
CGFloat dashes[] = {2, 3};
[path setLineDash:dashes count:2 phase:0];
- (UIBezierPath *)createArcPath
{
// Create path from text
// See: http://www.codeproject.com/KB/iPhone/Glyph.aspx
// License: The Code Project Open License (CPOL) 1.02 …
Run Code Online (Sandbox Code Playgroud) 在a CAShapeLayer
,我画了一个封闭的UIBezierPath
.我可以通过设置填充此形状fillColor
,但是我想用渐变填充形状.如何设置,CAGradientLayer
使其剪切为贝塞尔曲线所描绘的形状?
我正在尝试使用矩形UIBezierPath
.我采用了两种不同的方法来绘制它.另外,我将笔画宽度增加到25像素.
第一种方法:使用closePath
UIBezierPath *bpath = [UIBezierPath bezierPath];
[bpath moveToPoint:CGPointMake(x, y)];
[bpath addLineToPoint:CGPointMake(x + w, y)];
[bpath addLineToPoint:CGPointMake(x + w, y + h)];
[bpath addLineToPoint:CGPointMake(x, y + h)];
[bpath closePath];
Run Code Online (Sandbox Code Playgroud)
输出:
第二种方法:手动关闭路径
UIBezierPath *bpath = [UIBezierPath bezierPath];
[bpath moveToPoint:CGPointMake(x, y)];
[bpath addLineToPoint:CGPointMake(x + w, y)];
[bpath addLineToPoint:CGPointMake(x + w, y + h)];
[bpath addLineToPoint:CGPointMake(x, y + h)];
[bpath addLineToPoint:CGPointMake(x, y)];
Run Code Online (Sandbox Code Playgroud)
输出:
在closePath
它的文档中说This method closes the current subpath by creating a line segment between the first and …
uibezierpath ×10
ios ×8
objective-c ×4
iphone ×2
swift ×2
bezier ×1
cashapelayer ×1
crop ×1
drawing ×1
glyph ×1
ipad ×1
nsbezierpath ×1
uiimage ×1