【发布时间】:2016-01-25 09:59:09
【问题描述】:
我正试图用我愚蠢的绘图保存图像,但是当我保存图像时,只有原始图像被保存。
这是我的图像保存代码:
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);
}
这是我的自定义类。
【问题讨论】:
-
据我了解,您使用的是自定义
UIImageView子类,它操纵图像的渲染,而不是图像的数据本身。显示您的自定义子类;确保image的 getter 正在返回修改后的数据。 -
@JanGreve 好的兄弟等一下
标签: ios objective-c uiimageview calayer