Tag: uibezierpath

在iOS中绘制类似于圆形图的Hexagon

我正在绘制一个有三种不同颜色的六边形。 我为每一行都给了一个颜色。 这是我的代码; – (void)drawRect:(CGRect)rect { self.colors = [[NSMutableArray alloc] initWithObjects:[UIColor yellowColor],[UIColor yellowColor],[UIColor blueColor],[UIColor blueColor],[UIColor greenColor],[UIColor greenColor], nil]; [self addPointsToArray]; CGPoint startPoint = [[self.points objectAtIndex:self.pointCounter] CGPointValue]; CGPoint endPoint = [[self.points objectAtIndex:self.pointCounter+1] CGPointValue]; UIColor *color = [self.colors objectAtIndex:self.pointCounter]; [self drawingEachLineWithDifferentBezier:startPoint endPoint:endPoint color:color]; self.pointCounter++; } – (void)addPointsToArray { self.points = [[NSMutableArray alloc] init]; float polySize = self.frame.size.height/2; […]

不可靠的UIBezierpath曲线机制,控制点和曲线点

我试图使用UIBezierPath绘制一个简单的抛物线形状。 我有一个maxPoint和一个boundingRect我正在基础的抛物线的宽度和拉伸。 这里是我绘制抛物线的函数(我在容器视图中绘制抛物线, rect将是container.bounds ): func addParabolaWithMax(maxPoint: CGPoint, inRect boundingRect: CGRect) { let path = UIBezierPath() let p1 = CGPointMake(1, CGRectGetMaxY(boundingRect)-1) let p3 = CGPointMake(CGRectGetMaxX(boundingRect)-1, CGRectGetMaxY(boundingRect)-1) path.moveToPoint(p1) path.addQuadCurveToPoint(p3, controlPoint: maxPoint) // Drawing code … } 我的问题是,我希望在maxPoint中发送的maxPoint成为抛物线本身的实际极点。 因此,例如,如果我发送(CGRectGetMidX(container.bounds), 0) ,最高点应该在最顶端的中心。 但是在使用这个特定点的函数时,结果是这样的: 那么究竟是什么path呢? 或换句话说,我怎样才能从controlPoint点到我需要的实际最大点? 我试着根据boundingRect的高度来添加和减去y值中的不同值,但是我找不到正确的组合,因为在具有不同y值的不同点中,它的行为有所不同。 似乎有一些乘法器被join,我该如何解决?

UIBezierPath没有按预期更新

这是我的自定义视图的代码: class CircleView3: UIView { let endPoint = 270.0 var index = 0.0 var startPoint: Double { get{ index++ let div = 360.0/60.0 let vaule = div * index return 290.0 + vaule } } func degreesToRadians (number: Double) -> CGFloat { return CGFloat(number) * CGFloat(M_PI) / 180.0 } override func drawRect(rect: CGRect) { super.drawRect(rect) […]

获取UIBezierPath笔画的大纲path

我有一个UIBezierPath笔画,现在我想得到笔画的轮廓path(不是笔画的path本身),有没有办法我可以得到这个? 或者至lessNSLog的UIBezierPath中风的轮廓path? 谢谢

在一个可以略微离开屏幕的正在运行的animation中检索轻敲的UIButton

这是下面的代码: 码: import UIKit class TornadoButton: UIButton{ override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { let pres = self.layer.presentation()! let suppt = self.convert(point, to: self.superview!) let prespt = self.superview!.layer.convert(suppt, to: pres) return super.hitTest(prespt, with: event) } } class TestViewController: UIViewController{ override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let greySubview = UIView() greySubview.backgroundColor […]

在Swift中绘制UIBezierPath的连续期间,消除滞后延迟

下面的代码通过覆盖触摸来绘制线条,但是在连续的不停止绘图的时间段内滞后开始发生。 手指在屏幕上移动的时间越长,这种滞后越积累越差。 结果是CPU在实际设备(CPU 98%+)上几乎达到最大值,并且随着绘图的持续时间越长,所得到的图像看起来不稳定。 而且,特别是在绘制特别快的圆圈时, path与temporaryPath (或localPath )之间绘制的path存在差异。 虽然他们在不同的时间被画出来,但他们似乎同时出现在屏幕上,这看起来似乎分散注意力,看到两条path快速拉近。 内部path( path )显示为与下面的一个图像中以红色突出显示的外部path( temporaryPath )的距离。 1 – 如何消除一段连续绘图的滞后延迟? 2 – 如何消除path上的差异? 3 – 如何改变path和temporaryPath path的alpha / opacity? class swiftView: UIView { var strokeColor = UIColor.blueColor() var lineWidth: CGFloat = 5 var snapshotImage: UIImage? private var path: UIBezierPath? private var temporaryPath: UIBezierPath? private var points = [CGPoint]() […]

如何创build只有左上angular和左下angular半径的圆angularUIButton

我需要创build一个左上angular和左下angular半径的button,就像这个 。 我尝试通过创build以下从stackoverflow答案采取的扩展: extension UIButton { func roundCorners(corners:UIRectCorner, radius: CGFloat) { self.layer.borderColor = GenerateShape.UIColorFromHex(0x989898, alpha: (1.0-0.3)).CGColor self.layer.borderWidth = 1.0 let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) let mask = CAShapeLayer() mask.path = path.CGPath self.layer.mask = mask } } 然后调用这样的方法: self.collectionBtn.roundCorners(.TopLeft | .BottomLeft, radius: cornerRadius) 此代码生成以下形状 那为什么左上angular和左下angular不可见? 我应该怎么做才能使其可见?

iOS上的UIBezierPath操作

我开始用一条直线,我希望用户能够触摸并拖动线,使其曲线。 实际上,他们有能力将线路操纵成波形。 我不确定在技术上实现这个最简单的方法。 我已经开始创build一个三维曲线的UIBezierPaths数组,以便操纵控制点 – 但是看起来,一旦绘制了UIBezierPaths的控制点,就不可能改变它们的控制点了吗? 任何关于最简单的技术方法的build议表示赞赏。

如何缩放CAShapeLayer

在swift中,我成功地制作了一个包含在CAShapeLayer的animationbezier path 。 我唯一的问题是实施到其他屏幕尺寸。 有谁知道我怎么可以扩大CAShapeLayer里面的path? 即使它成为原来大小的一半。

检测贝塞尔path内的水龙头

我有一个UIView作为子视图添加到我的视图控制器。 在这个观点上,我画了一条更加缓慢的道路。 我的drawRect实现如下 – (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); UIBezierPath *bpath = [UIBezierPath bezierPath]; [bpath moveToPoint:CGPointMake(50, 50)]; [bpath addLineToPoint:CGPointMake(100, 50)]; [bpath addLineToPoint:CGPointMake(100, 100)]; [bpath addLineToPoint:CGPointMake(50, 100)]; [bpath closePath]; CGContextAddPath(context, bpath.CGPath); CGContextSetStrokeColorWithColor(context,[UIColor blackColor].CGColor); CGContextSetLineWidth(context, 2.5); CGContextStrokePath(context); UIColor *fillColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.5 alpha:0.7]; [fillColor setFill]; [bpath fill]; } 我想检测这个贝塞尔path内部的点击,而不是UIView内部和path外部的点。 例如,在这种情况下,如果我的触摸坐标是(10,10),则不应该检测到。 我知道关于CGContextPathContainsPoint,但是当触摸在path中时,它不起作用。 有没有办法检测贝塞尔path内的触摸事件?