UIBezierPath的起点和终点角度?
我使用 uibezierpath 和 cashapelayer . clockWiseLayer = [[CAShapeLayer alloc] init]; CGFloat startAngle = -M_PI_2; CGFloat endAngle = M_PI + M_PI_2; CGFloat width = CGRectGetWidth(imageView.frame)/2.0f + 30; CGFloat height = CGRectGetHeight(imageView.frame)/2.0f +50; CGPoint centerPoint = CGPointMake(width, height); float radius = CGRectGetWidth(imageView.frame)/2+10; clockWiseLayer.path = [UIBezierPath bezierPathWithArcCenter:centerPoint
0 2024-02-20
编程技术问答社区
如何对不描述函数的N个点进行插值
假设我有n点,也假设该点有一个顺序,没有必要的要点可以函数.我想知道如果要点没有描述功能,该如何插入它们?例如,这将是原始点: 我希望这个结果: 请注意,只有使用样条不起作用,因为这些点不能产生函数,并且使用bezier曲线行不通,因为它们不会插入点(仅通过它们附近).我该怎么做?有算法吗? 只是一个更新.由于我作为参考的接受答案的链接已降低,因此我将分享我写的一篇文章,以帮助他人解决这个问题. wpf中的曲线 最终算法的实时实现. JavaScript 解决方案 有很多花键,例如 曲线由Maxim Shemanarev 提出 其他解决方案 此答案解决了问题本身的一些概念问题.我不打算作为一个完整的答案. 首先是在给定情况下总是有一个函数.从数学上讲,您将曲线描述为来自实际数字的函数,大致表示"时间"到您的空间.这通常称为曲线的参数表示.我们将函数写为f(t) =( x(t), y(t) ),其中x(t)和y(t)是单个参数函数.
2 2024-01-23
编程技术问答社区
寻找路径上的一个点
我有一个绘制a UIView曲线的应用UIBezierPath但您可以找到一个CGPath的点. 首先,如果我"抚摸"我的UIBezierPath(就像我在代码中所做的那样),这实际上是创建一个cgpath,还是我需要采取进一步的步骤将其实际转换为? 第二,我想通过提供y. 的值来找到x处的曲线 我的目的是在用户移动滑块时自动计算y的给定值x(分别向左或向右移动曲线). 我的起始显示. 当我当前调整滑块时会发生什么. 我想要显示的样子. graphView.h #import @interface GraphView : UIView { float adjust; int x; int y; } - (IBAction)sliderChanged:(id)sender; - (IBAction)yChanged:(id)sender; @property (weak, nonat
2 2024-01-22
编程技术问答社区
UIBezierPath intersect
我已经在寻找答案了几个小时,但是很难找到有关该主题的任何内容. 我有一个与Objective-C有关的问题.我正在制作一个应用程序,其中uiview检查用户的触摸以及用户触摸并移动手指,绘制了使用uibezierpath的路径.如果用户绘制以使路径与自身相交,则应从屏幕上消失.当用户完成绘制模式时,路径的最后一点的一行应自动与路径中的第一个点连接(我正在使用该行的方法" clotepath"),如果该行与另一行相交"在路径中,路径也应从屏幕上消失. 我将每个触摸点存储在CGPoint中,我将其存储在另一个名为Line的类中为A和PointB.然后我将"行"保存到NSMutableArray称为"线".每当将点添加到路径中时,我都会查看该点和绘制点之间的界线是否与使用方法相交的任何"行"中的任何"行"( - (bool)CepnlineIntertection:(cgpoint)P1 :( cgpoint)p2 :( cgpoint)p3:(cgpoint)p4)我从本教程中获
4 2024-01-22
编程技术问答社区
如何初始化UibezierPath以在Swift中绘制一个圆圈?
我正在尝试在Swift中绘制一个圆圈,但是当我编写代码时,我会遇到错误" 在类uibezierpath中有一个init函数: init(arcCenter center: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool) -> UIBezierPath 但是,当我用此代码声明此问题时,我会收到错误..需要我对其他类型的任何变量?但是,如果我在iPhone 4中编译了此内容,则仅在iPhone 5/5s中收到错误.如何正确声明? let arcCenter = CGPoint(x: CGRectGetMidX(self.bounds), y: CGRectGetMidY(self.bounds)) let radius = Float(min(CGRectGetMidX(self.bounds) - 1, CGRectGetMid
0 2023-12-20
编程技术问答社区
缩放设置模糊了图形
我在Xcode 7/swift 2中编写了一个针对iPhone 6/6s优化的项目(即该项目具有启动屏幕文件和iPhone 6/6s的启动屏幕图像). 幸运的是或不幸的是,iPhone 6用户可以在设备上打开"显示变焦"设置,该设备扩大了接口的元素.打开时,此设置有效地扩大了标准的iPhone 5屏幕尺寸,以适合iPhone 6屏幕空间,将其升至x1.171875.进行更大的采样会导致基于栅格的元素,例如图像,图标或包含UIBezierPath()图的视图以显示模糊(温和但明显). 一些问题: 感谢对这个难题的任何经验丰富的回应.谢谢. 1-在用户打开它时,如何指示代码中的元素(例如uiview)以忽略显示Zoom设置? 2-有哪些技术可以确保在显示变焦时仍然存在完美的精度? (例如,是否可以使用OpenGL渲染渲染图形,如果是的,如何?) 3-是否可以用X4图像替换X2图像以减少显示变焦时的任何模糊? (即iOS将X4映像放到iPhone 6上的X2
4 2023-12-19
编程技术问答社区
NSD词典中的UIBezierPath--有可能吗?
我试图在nsdictionary中保存uibezierpath和其他一些值. 我在词典中写下: NSMutableArray *paths = [[NSMutableArray alloc]init]; touchesbegan: - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { CGPoint touchPoint = [[touches anyObject] locationInView:self.drawImage]; path = [[UIBezierPath bezierPath] retain]; path.lineCapStyle = kCGLineCapRound; path.lineWidth = brushSize; [path moveToPoint:touchPoint]; [self updateDrawingBoard]; } 触摸: -
4 2023-12-19
编程技术问答社区
为什么在以下情况下,bezier路径内的hitTest / tap检测会产生不准确的结果?
我需要在UI的非常特定的区域内检测TAPS-钢琴键,在这里以蓝色突出显示,但是我当前设置了它的方式,检测是不准确的: 由于这不是一个简单的矩形,所以我不能只使用常规按钮.相反,我决定使用PaintCode plugin,以直接从Sketch创建bezier路径. 在您说这个问题之前是重复的:是的,我知道这个问题以前是这样的,实际上,我严重依靠Abhimanyu Rathore和Diogo Souza的答案来获得基本功能. 草图图像由3个部分,blackKeyTop,blackKeySide和blackKeyBottom制成,这就是为什么PaintCode似乎已经创建了3个单独的bezier路径: // // StyleKit.swift // // Created on May 2, 2019. // // Generated by PaintCode Plugin for Sketch // http://www.paintcodeapp.com/ske
4 2023-12-19
编程技术问答社区
我如何从CashApelayer获得坐标
所以我正在尝试取得进步栏.因此,我已经制作了圆形路径,但是我希望点在进度栏的尽头,但是我如何使点的位置成为当前进度的末端? private func simpleShape() { let width: CGFloat = 10 createCircle() //make circle transparant in middle progressLayer.fillColor = UIColor.clear.cgColor progressLayer.strokeColor = UIColor.blue.cgColor progressLayer.lineCap = CAShapeLayerLineCap.round progressLayer.lineWidth = width progressLayer.strokeStart = 0 progressLayer.strokeEnd = 0 //unfilled backLayer
0 2023-12-19
编程技术问答社区
在spritekit中沿UIBezierPath绘制结点
我目前正在SpriteKit中开发一个具有游戏级别图的游戏.我正在使用uibezierpath来适应我想要级别节点的路径,我唯一的问题是试图沿着路径绘制它们,并想知道我如何将它们添加到场景中,以便将它们添加到路径方式中除了最后一个绘制的绘制的最后一个,每个人都单独间隔50.目前我有: 我的代码 let path = UIBezierPath() path.move(to: CGPoint(x: -200, y: 0)) path.addCurve(to: CGPoint(x: 0, y: 0), controlPoint1: CGPoint(x: 0, y: 0), controlPoint2: CGPoint(x: -200, y: 0)) path.addCurve(to: CGPoint(x: 140, y: 0), controlPoint1: CGPoint(x: 60, y: 180), controlPoint2: CGPoint(x: 140, y: 10))
0 2023-12-19
编程技术问答社区
在xcode中检测绘制路径是否为圆/矩形
我想为图纸应用程序实现自动完整功能.绘制了自由手对象后,我想检测对象的类型(圆/矩形/三角形),并基于结果需要绘制相应的对象. 我已经阅读了一些有关OpenCV的信息,但是然后我需要实时将用户绘图转换为图像.我正在记录通过触摸绘制/追踪的点数,并生成相应路径的UIBeizerPath.我该如何检测形状类型? 解决方案 您需要首先将数据点细分. Google在"中风细分"上查找相关文章.一个简单而快速的算法是为每个数据点计算前向斜率和后斜率,然后计算前斜率和后斜率之间的转弯角.如果转弯角大于一定角度阈值,则可以假设您的路径急转弯.从计算出尖锐的转弯数中,您可以推断出这些点是否代表三角形(带有2个尖锐的转弯),四边形(带有3个尖锐的转弯)或其他东西.为了推断数据点代表一个圆或矩形,您需要进行其他计算.例如,如果根本没有急剧的转弯,请对数据点进行一个圆圈拟合,以查看拟合圆的最大误差是否小于某个公差.要输出矩形,您必须将直线拟合到数据点的每个段,并检查拟合线是否或多或少彼此正交.
0 2023-12-18
编程技术问答社区
对用UIBezierPath创建的弧线应用梯度颜色
我想创建一个具有弧形形式的进度栏.进度条的颜色必须根据值改变. 我使用UIBezierPath bezierPathWithArcCenter创建了一个弧.我使用以下代码: - (void)viewDidLoad { [super viewDidLoad]; int radius = 100; CAShapeLayer *arc = [CAShapeLayer layer]; arc.path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 50) radius:radius startAngle:60.0 endAngle:0.0 clockwise:YES].CGPath; arc.position = CGPointMake(CGRectGetMidX(self.view.frame)-radius,
8 2023-12-18
编程技术问答社区
Swift 3中的动画曲线线
我想绘制一些bezzier线条,我想通过波动效应来使它们动画 示例 您对如何做到这一点有一些想法吗? Bezier线是最好的方法吗? 我只发现了2个libs,但是对于我的需求并不是真的有用,我尝试修改一个lib的代码,不幸的是,没有成功的 https://github.com/yourtion/yxwaveview 我发现了这个lib, https://antiguab.github.io/bafluidview/这项工作,但它用obj-c写了,也许您在Swift 中知道类似的东西 解决方案 您可以使用显示链接,一种特殊的计时器优化对于屏幕刷新率,要更改正在渲染的path.显示链接的处理程序应计算经过的时间量并修改相应渲染的路径.您可以使用CAShapeLayer渲染路径,也可以使用自定义UIView子类.形状层可能更容易: class ViewController: UIViewController { private weak var disp
6 2023-11-05
编程技术问答社区
如何在圆形上创建一个圆形的视图?
我想创建一个正方形的uiview,直径为50px的半圆将其切割在底部: 我尝试了此代码: class CustomView: UIView { override func layoutSubviews() { super.layoutSubviews() let radius = 50.0 let path = UIBezierPath( arcCenter: CGPoint( x: bounds.midX, y: bounds.maxY ), radius: radius, startAngle: .pi, endAngle: 0, clockwise: true )
4 2023-11-05
编程技术问答社区
如何访问在 draw(_ rect: CGRect) 中绘制的 UIBezierPath?
我以前在draw(_ rect:cgrect)方法中使用uibezierpath绘制线条以前我确实使用CashApelayer尝试了一下,但是我无法选择特定的路径并移动它,所以我正在尝试此操作,但是在绘制绘制后,我``我无法从视图的子视图或它的子层访问该bezierpath,也无法直接从Uiview访问.我如何访问DrawRect方法中绘制的BezierPath,以便我可以根据触摸更改其位置. private var bezierPaths: [MyBezierPath] = [MyBezierPath]() override func draw(_ rect: CGRect) { super.draw(rect) UIColor.orange.set() for path in bezierPaths { path.lineWidth = 4 path.lineCapStyle = .round p
2 2023-11-05
编程技术问答社区
绘制弯曲的线条而不滞后?
我有一个下方的类,当用户触摸其设备时,将其连接到视图时会绘制弯曲线.问题在于,绘制的线似乎从屏幕上的手指的位置落后.滞后足以引起人们的注意和轻度烦人,因为该线的新部分与触摸屏幕的手指相距很小. 代码使用addCurveToPoint曲线方法. (替代addQuadCurveToPoint曲线方法在质量弯曲线方面似乎不太优越,但确实更快地显示在屏幕上.) 我怀疑这个问题与setNeedsDisplay counter == 4时称为setNeedsDisplay时有关.似乎代码等待,直到在绘制曲线线之前收到4个新接触点.理想情况下,在每个触摸点(即计数器== 1)绘制弯曲线,从而消除了滞后. (更改Counter == 1似乎不起作用.) 我迷路了,不知道如何更新代码以进一步改进该代码以删除短滞后,但保留了弯曲线. 需要在以下代码中更改以删除短滞后? // Swift 2 code below tested using Xcode 7.0.1. class dra
4 2023-11-05
编程技术问答社区
"启动 "并放下一个UIView
上图显示了我想要的: 红色圆圈是uiview的起点 我想随着x位置的更改向上启动(y位置) 我想让它落在边界内. 我尝试的是: 对于启动,我可以使用uiview.animate函数.对于下降,我可以使用uidynymicanimator.但是有一些问题: - 在uiview.animate我不能"曲线"动画,只有一条直线.我可以在此处使用此答案来绘制曲线线:/p> - 连接两个功能都无法正常工作. uiview.inimate完成后,uiview只是直接向下掉落. uidynamicanimator的代码: var animator: UIDynamicAnimator! //view did appear let view2 = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) view2.center = self.view.center v
4 2023-11-05
编程技术问答社区
使用UibezierPath的平行四边形视图
我正在尝试使用UIBezierPath创建自定义的平行四边形视图,但没有得到完美的视图. 以下是我的自定义视图代码 class CustomView: UIView { override func draw(_ rect: CGRect) { let offset = 60.0; let path = UIBezierPath() path.move(to: CGPoint(x: self.frame.origin.x + CGFloat(offset), y: self.frame.origin.y)) path.addLine(to: CGPoint(x: self.frame.width + self.frame.origin.x , y: self.frame.origin.y)) path.addLine(to: CGPoint(x: self.frame
4 2023-11-05
编程技术问答社区
UIBezierPath追加的重叠部分没有填满
我正在尝试使用UIBezierPath.append合并两个重叠的uibezierpath,我希望填充重叠的空间.我尝试将usesEvenOddFillRule属性设置为false,但仍然没有填充.这是问题的最小示例: override func draw(_ rect: CGRect) { let firstShape = UIBezierPath() firstShape.move(to: CGPoint(x: 100, y: 100)) firstShape.addLine(to: CGPoint(x: 100, y: 150)) firstShape.addLine(to: CGPoint(x: 150, y: 170)) firstShape.close() let secondShape = UIBezierPath(rect: CGRect(x: 125, y: 125, width: 75, height: 75)
4 2023-11-05
编程技术问答社区
如何将Uiview裁剪为半圈?
我想在半圆形形状中裁剪 预先感谢. 解决方案 一种方便的方法只是子类A UIView,在其上添加一层,如果默认情况下的视图颜色透明. import UIKit class SemiCirleView: UIView { var semiCirleLayer: CAShapeLayer! override func layoutSubviews() { super.layoutSubviews() if semiCirleLayer == nil { let arcCenter = CGPoint(x: bounds.size.width / 2, y: bounds.size.height / 2) let circleRadius = bounds.size.width / 2 let circlePath = UIBezierPath(a
4 2023-11-05
编程技术问答社区