gpt4 book ai didi

ios - 如何使用添加的 UIBezierPath 保存图像?

转载 作者:行者123 更新时间:2023-11-28 21:33:16 24 4
gpt4 key购买 nike

我想用我愚蠢的绘图保存图像,但是当我保存图像时,只有原始图像被保存。

我期望的图像是这样的: enter image description here

这是我的图片保存代码:

UIImageWriteToSavedPhotosAlbum(_imgShow.image,
nil,
nil,
nil);

这是我的 UIImageView 自定义类:

    -(void)awakeFromNib
{
// drawingView=[[UIView alloc]initWithFrame:self.bounds];
// drawingView.backgroundColor=[UIColor clearColor];
// [self addSubview:drawingView];
clearBeizer=[[NSMutableArray alloc]init];
[self updateMask];
}
-(void)updateMask
{
CALayer *maskLayer=[CALayer layer];
maskLayer.geometryFlipped=YES;
maskLayer.contents=(id)self.image.CGImage;
switch (self.contentMode)
{
case UIViewContentModeScaleToFill:
maskLayer.contentsGravity = kCAGravityResize;
break;
case UIViewContentModeScaleAspectFit:
maskLayer.contentsGravity = kCAGravityResizeAspect;
break;
case UIViewContentModeScaleAspectFill:
maskLayer.contentsGravity = kCAGravityResizeAspectFill;
break;
case UIViewContentModeCenter:
maskLayer.contentsGravity = kCAGravityCenter;
break;
case UIViewContentModeTop:
maskLayer.contentsGravity = kCAGravityTop;
break;
case UIViewContentModeBottom:
maskLayer.contentsGravity = kCAGravityBottom;
break;
case UIViewContentModeLeft:
maskLayer.contentsGravity = kCAGravityLeft;
break;
case UIViewContentModeRight:
maskLayer.contentsGravity = kCAGravityRight;
break;
case UIViewContentModeTopLeft:
maskLayer.contentsGravity = kCAGravityTopLeft;
break;
case UIViewContentModeTopRight:
maskLayer.contentsGravity = kCAGravityTopRight;
break;
case UIViewContentModeBottomLeft:
maskLayer.contentsGravity = kCAGravityBottomLeft;
break;
case UIViewContentModeBottomRight:
maskLayer.contentsGravity = kCAGravityBottomRight;
break;
default:
break;

}
maskLayer.frame=self.bounds;
// drawingView.layer.mask=maskLayer;
self.layer.mask=maskLayer;

}
-(void)setImage:(UIImage *)image
{
[super setImage:image];
[self updateMask];
}
-(void)layoutSubviews
{
[super layoutSubviews];
// drawingView.frame=self.bounds;
// drawingView.layer.mask.frame=drawingView.bounds;
self.frame=self.bounds;
self.layer.mask.frame=self.bounds;
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
startingPoint = [touch locationInView:self];

}
-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
touchPoint = [touch locationInView:self];

if (!CGPointEqualToPoint(startingPoint, CGPointZero))
{
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(touchPoint.x,touchPoint.y)];
[path addLineToPoint:CGPointMake(startingPoint.x,startingPoint.y)];

CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = [path CGPath];
shapeLayer.strokeColor = [[UIColor blueColor] CGColor];
if([UIDevice currentDevice].userInterfaceIdiom ==UIUserInterfaceIdiomPad)
{
shapeLayer.lineWidth = 7.0;
}
else
{
shapeLayer.lineWidth = 5.0;

}

shapeLayer.fillColor = [[UIColor redColor] CGColor];
[self.layer addSublayer:shapeLayer];
[clearBeizer addObject:shapeLayer];
}
startingPoint=touchPoint;

// [arrLayer addObject:shapeLayer];
NSLog(@"Touch moving point =x : %f Touch moving point =y : %f", touchPoint.x, touchPoint.y);
}

这是我的自定义类。

最佳答案

您只是在更改图像的渲染,而不是图像本身的数据,然后写入该数据并期望它反射(reflect) View 的渲染。

您可以使用 snapshotViewAfterScreenUpdates:结果来自this question管理您实际想要实现的目标。

关于ios - 如何使用添加的 UIBezierPath 保存图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34989652/

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