gpt4 book ai didi

objective-c - UIBezierPath 绘制直线

转载 作者:搜寻专家 更新时间:2023-10-30 20:20:25 24 4
gpt4 key购买 nike

这是我目前正在使用的相关 .m。

- (void)drawRect:(CGRect)rect
{

[[UIColor redColor] setStroke];
for (UIBezierPath *_path in pathArray)
[_path strokeWithBlendMode:kCGBlendModeNormal alpha:1.0];


}

#pragma mark -
#pragma mark - Touch Methods


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
myPath=[[UIBezierPath alloc]init];


NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];

if([ud objectForKey:@"lineThickness"] == nil) {
myPath.lineWidth=5;
}
else {

float thicknessFloat = [ud floatForKey:@"lineThickness"];
myPath.lineWidth= 10. * thicknessFloat;


}

UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
[myPath moveToPoint:[mytouch locationInView:self]];
[pathArray addObject:myPath];

}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];

if([ud objectForKey:@"lineThickness"] == nil) {
myPath.lineWidth=5;
}
else {

float thicknessFloat = [ud floatForKey:@"lineThickness"];
myPath.lineWidth= 10. * thicknessFloat;


}
[myPath addLineToPoint:[mytouch locationInView:self]];
[self setNeedsDisplay];

}

效果很好,但由于这是我稍微修改过的教程代码,我不知道如何解决想要在两点之间画线的问题,并让框架每次连接点已添加。

谁能给我指出一个好的方向,告诉我如何完成这个?

最佳答案

如何实现它的细节取决于您正在寻找的效果。如果您只是点击一堆点并想将它们添加到 UIBezierPath,您可以在 View Controller 中执行如下操作:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *mytouch = [[touches allObjects] objectAtIndex:0];
CGPoint location = [mytouch locationInView:self.view];

// I'm assuming you have a myPath UIBezierPath which is an ivar which is
// initially nil. In that case, we'll check if it's nil and if so, initialize
// it, otherwise, it's already been initialized, then we know we're just
// adding a line segment.

if (!myPath)
{
myPath = [UIBezierPath bezierPath];
[myPath moveToPoint:location];

shapeLayer = [[CAShapeLayer alloc] initWithLayer:self.view.layer];
shapeLayer.lineWidth = 1.0;
shapeLayer.strokeColor = [UIColor redColor].CGColor;
shapeLayer.fillColor = [UIColor clearColor].CGColor;

[self.view.layer addSublayer:shapeLayer];
}
else
{
[myPath addLineToPoint:location];
shapeLayer.path = myPath.CGPath;
}
}

如果你想要一些可以用手指画的东西(例如拖动你的手指画),那么它可能看起来像:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *mytouch = [[touches allObjects] objectAtIndex:0];
CGPoint location = [mytouch locationInView:self.view];

myPath = [UIBezierPath bezierPath];
[myPath moveToPoint:location];

shapeLayer = [[CAShapeLayer alloc] initWithLayer:self.view.layer];
shapeLayer.lineWidth = 1.0;
shapeLayer.strokeColor = [UIColor redColor].CGColor;
shapeLayer.fillColor = [UIColor clearColor].CGColor;

[self.view.layer addSublayer:shapeLayer];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *mytouch = [[touches allObjects] objectAtIndex:0];
CGPoint location = [mytouch locationInView:self.view];

[myPath addLineToPoint:location];
shapeLayer.path = myPath.CGPath;
}

关于objective-c - UIBezierPath 绘制直线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12983211/

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