Tag: 绘制

iOS – 基于百分比填充多种颜色的bezierPath

我在Objective-C中绘制了一个UIBezierPath,并用红色填充。 现在,我想根据百分比用多种颜色填充path。 例如:我想用20%的绿色填充path,剩下的80%用红色填充,而不是渐变。 我也希望在填充和笔画之间有几个像素的间距。 我不知道我怎样才能完成这些事情。 有谁知道我可以做到这一点或指出我在正确的方向吗? 提前谢谢了! UIBezierPath* bezierPath = UIBezierPath.bezierPath; [bezierPath moveToPoint: CGPointMake(50, 50)]; [bezierPath addLineToPoint: CGPointMake(60, 90)]; [bezierPath addLineToPoint: CGPointMake(80, 90)]; [bezierPath addLineToPoint: CGPointMake(90, 50)]; bezierPath.lineCapStyle = kCGLineCapRound; bezierPath.lineJoinStyle = kCGLineJoinBevel; [UIColor.redColor setFill]; [bezierPath fill]; [UIColor.blackColor setStroke]; bezierPath.lineWidth = 4; [bezierPath stroke];

在imageView顶部绘制带有清晰背景的矩形

我想绘制一个矩形与一个随意的边框颜色与清晰的背景上的一个imageView 。 我需要遍历一组坐标,并为我的图像添加适当的矩形。 我不能设法弄清楚矩形背景颜色。 代码如下: // the draw class class Draw: UIView { override init(frame: CGRect) { super.init(frame: frame) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func draw(_ rect: CGRect) { let h = rect.height let w = rect.width let color:UIColor = Palette.getRandomColour() //var drect = CGRect(x: (w * […]

在Swift中绘制人造物

下面的代码通过覆盖触摸来绘制线条,但是在绘制时存在一个人造物,见下图。 当改变方向而锯齿形在屏幕上蜿蜒的时候,有时线会变成一个平坦的直angular,而不是保持圆形。 当在小圆点上画点时也会出现人为现象,当手指离开屏幕时,绘图点有时会半圈闪烁半圈,部分圈残留。 人工制品是间歇性的,而不是完全一致或可预测的模式,这使得很难在代码中find问题。 它出现在模拟器和iOS7 – iOS9的设备上。 一个包含两个带有Xcode项目绘制点和线的video屏幕截图的zip文件被上传到一个名为Archive.zip(23MB)的DropBox文件中https://www.dropbox.com/s/hm39rdiuk0mf578/Archive.zip?dl = 0 问题: 1 – 在代码中,是什么造成了这个点/半圆的人造物,怎样才能纠正? class SmoothCurvedLinesView: UIView { var strokeColor = UIColor.blueColor() var lineWidth: CGFloat = 20 var snapshotImage: UIImage? private var path: UIBezierPath? private var temporaryPath: UIBezierPath? private var points = [CGPoint]() private var totalPointCount = 0 override func drawRect(rect: CGRect) { snapshotImage?.drawInRect(rect) strokeColor.setStroke() […]

CALayer和视图消失

我有一个CATAILLAYERpipe理的大图像(如大图缩小iOS示例代码 )。 我有一个绘图视图(UIView覆盖绘图方法),但当我缩小了很多,我得到以下消息,我的看法消失.. -[<CALayer: 0xb253aa0> display]: Ignoring bogus layer size (25504.578125, 15940.361328) 有没有办法避免这种情况?

在触摸屏上捕捉签名非常粗略

我遵循一个教程来捕获在Firemonkey中的签名 ,并做了一些重大的修改(本质上是重写)封装在自定义控件中。 我在VCL写了很多控件,但是这是我第一次使用FMX。 当使用鼠标(Windows或OS X)时,它完美的工作。 但是,使用触摸屏(iOS)时,变得非常粗略。 具体来说,它会持续捕获鼠标事件(或在此情况下,“笔”)。 所以一条直线变成了一条虚线。 这是MouseUp在触摸屏上滑动手指时反复发射的直接结果。 视窗: iOS版: 当手指没有从触摸屏上抬起时,我怎样才能防止它“捕捉”事件? 控制单元: VectorSignature.pas unit VectorSignature; interface uses System.Classes, System.SysUtils, System.Types, System.UITypes, System.Generics.Collections, FMX.Controls, FMX.Objects, FMX.Graphics, FMX.Types; type TSignatureControl = class; TVectorState = (vsPenDown, vsPenMove, vsPenUp); TVectorPoint = record CurPos: TPointF; State: TVectorState; end; TVectorEvent = procedure(Sender: TObject; Point: TVectorPoint) of object; TSignatureControl = class(TShape) […]

在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圆圈animation的正确方法?

我刚刚看到这个图像,我很感兴趣,如何在Swift中创build这种types的animation: 所以,我有很多灰色的牙齿在圈子里,当我设置angular度,例如45度,它会在0..45度内将这些灰色的牙齿填充成蓝色。 你可以向我解释正确的方法,或者你可以显示不同的片段(这将是伟大的)。 后来我会search或阅读。 提前致谢!

使用CAShape图层绘制两条平行线

我正在画单线 CAShapeLayer *lineShape = nil; CGMutablePathRef linePath = nil; linePath = CGPathCreateMutable(); lineShape = [CAShapeLayer layer]; lineShape.lineWidth = 1.0f; lineShape.lineCap = kCALineJoinMiter; lineShape.strokeColor = [[UIColor redColor] CGColor]; CGPathMoveToPoint(linePath, NULL, x, y); CGPathAddLineToPoint(linePath, NULL, toX, toY); lineShape.path = linePath; CGPathRelease(linePath); [myView.layer addSublayer:lineShape]; 我想绘制一条平行线到这条线。 任何想法或计算? 或者是否有任何获取这一特定行的触点的代码。 其实我可以得到触摸点,当我触摸两条线之间,并从CGPathContainsPoint方法我可以得到触摸点之间的两条线,因此我想在这里创build两条平行线。

使用UIKit绘制复选标记NSString不会考虑填充颜色

我试图用UIKit绘制一个绿色的复选标记,但它是用黑色绘制的。 这里是代码: [[UIColor greenColor] set]; [@"✔" drawAtPoint:CGPointZero withFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]]; 其他string用这种方法正确地绘制成绿色。 我怀疑复选标记符号包含的颜色信息覆盖了我select的填充颜色,但在UIWebView中使用颜色绘制相同的标志符号。 有没有办法让复选标记为绿色?

用UIBezierPath单行绘制字母(文本)

我正在使用这个和这个参考。 我是新的使用UIBezierPath,我想绘制字符(字母)代码我使用的path如下。 CGMutablePathRef letters = CGPathCreateMutable(); CTFontRef font = CTFontCreateWithName(CFSTR("Courier New"), 200.0f, NULL); NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys:CFBridgingRelease(font), kCTFontAttributeName,nil]; NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:@"B" attributes:attrs]; CTLineRef line = CTLineCreateWithAttributedString((CFAttributedStringRef)attrString); CFArrayRef runArray = CTLineGetGlyphRuns(line); // for each RUN for (CFIndex runIndex = 0; runIndex < CFArrayGetCount(runArray); runIndex++) { // Get FONT for this run CTRunRef […]