gpt4 book ai didi

iphone - 如果原始CGPoint丢失,如何将存储的CGPath重新绘制为Bezier路径

转载 作者:行者123 更新时间:2023-12-01 18:26:45 25 4
gpt4 key购买 nike

如果未存储原始CGPoint,如何将存储的CGPath重新绘制为Bezier路径?

这是代码,但是不起作用(以标准模式而不是Bezier模式重绘路径):

CGMutablePathRef UpathFREEHAND = CGPathCreateMutable();
CGPoint firstPointFH = [[pointArray objectAtIndex:0] CGPointValue];
CGPathMoveToPoint(UpathFREEHAND, NULL, firstPointFH.x, firstPointFH.y);

for (int i = 0; i < [pointArray count]; i++)
{
CGPathAddLineToPoint(UpathFREEHAND, NULL, [[pointArray objectAtIndex:i] CGPointValue].x,
[[pointArray objectAtIndex:i] CGPointValue].y);
}

CGMutablePathRef _TempPathForUndo = UpathFREEHAND;

//Add PATH object to array
[UPath addObject:CFBridgingRelease(_TempPathForUndo)];

//Load PATH object from array
_TTempPathForUndo = (__bridge CGMutablePathRef)([UPath objectAtIndex:i]);

// Now create the UIBezierPath object.
UIBezierPath *bp;
bp = [UIBezierPath bezierPath];
bp.CGPath = _TTempPathForUndo;

CGContextAddPath(context, bp.CGPath);
//Color, Brush Size parameters, Line cap parameters..
CGContextStrokePath(context);

最佳答案

您可以从 UIBezierPath 使用以下方法:

+ (UIBezierPath *)bezierPathWithCGPath:(CGPathRef)CGPath
CGPath的重用是有效的。检查此示例,在 TestView中添加 UIViewController并链接 UIButton以在使用 [_testView setNeedsDisplay]单击它时强制重绘:
// TestView.h

#import <UIKit/UIKit.h>

@interface TestView : UIView {

CGMutablePathRef _path;
BOOL _nextDraws;
}

@end

// TestView.m

#import "TestView.h"

@implementation TestView

- (void)drawRect:(CGRect)rect {

BOOL firstDraw = !_nextDraws;
CGContextRef ctx = UIGraphicsGetCurrentContext();

if (firstDraw) {
NSLog(@"first draw");

_path = CGPathCreateMutable();
CGPathMoveToPoint(_path, NULL, 0, 0);
CGPathAddLineToPoint(_path, NULL, CGRectGetMaxX(rect), CGRectGetMaxY(rect));
CGPathCloseSubpath(_path);
CGContextAddPath(ctx, _path);
CGContextSetStrokeColorWithColor(ctx,[UIColor whiteColor].CGColor);
CGContextStrokePath(ctx);

_nextDraws = YES;
}
else {
NSLog(@"next draws");

CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextClearRect(ctx, rect);
UIBezierPath * bezierPath = [UIBezierPath bezierPathWithCGPath:_path];
CGContextAddPath(ctx, bezierPath.CGPath);
CGContextSetStrokeColorWithColor(ctx,[UIColor whiteColor].CGColor);
CGContextStrokePath(ctx);
}
}

- (void)dealloc {
CGPathRelease(_path);
[super dealloc];
}

@end

关于iphone - 如果原始CGPoint丢失,如何将存储的CGPath重新绘制为Bezier路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12995555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com