美文网首页
iOS画板上画图片补充

iOS画板上画图片补充

作者: 恋空K | 来源:发表于2022-11-10 17:02 被阅读0次
自定义一个跟UIImageView一样的


把图片绘制上去,可以理解为就是绘制一条线
这里的代码就是对上一篇文章的补充,可以拖动图片,做一些操作后在把图片画上去,而不是跟上一篇文章的
代码一样直接把图片画上去
#import <UIKit/UIKit.h>

//定义协议
@class HandleView;
@protocol HandleViewDelegate <NSObject>

- (void)handleView:(HandleView *)handleV newImage:(UIImage *)newImage;

@end

@interface HandleView : UIView

@property (nonatomic, strong) UIImage *image;

//定义代理属性
@property (nonatomic, weak) id<HandleViewDelegate> delegate;

@end
#import "HandleView.h"

@interface HandleView ()<UIGestureRecognizerDelegate>

@property (nonatomic, weak) UIImageView *imageV;

@end

@implementation HandleView


- (UIImageView *)imageV {

    if (_imageV == nil) {
        
        UIImageView *imageV = [[UIImageView alloc] init];
        imageV.frame = self.bounds;
        imageV.userInteractionEnabled = YES;
        [self addSubview:imageV];
        _imageV = imageV;
        
        //添加手势
        [self addGes];
        
    }
    return _imageV;
}

//添加手势
-(void)addGes{
    
    // pan
    // 拖拽手势
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]
                                   initWithTarget:self action:@selector(pan:)];
    
    [self.imageV addGestureRecognizer:pan];
    
    // pinch
    // 捏合
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];
    
    pinch.delegate = self;
    [self.imageV addGestureRecognizer:pinch];
    
    
    //添加旋转
    UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)];
    rotation.delegate = self;
    [self.imageV addGestureRecognizer:rotation];
    
    // 长按手势
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
    [self.imageV addGestureRecognizer:longPress];
    
}

//捏合的时候调用.
- (void)pinch:(UIPinchGestureRecognizer *)pinch
{
    
     self.imageV.transform = CGAffineTransformScale(  self.imageV.transform, pinch.scale, pinch.scale);
    // 复位
    pinch.scale = 1;
}


//旋转的时候调用
- (void)rotation:(UIRotationGestureRecognizer *)rotation
{
    // 旋转图片
    self.imageV.transform = CGAffineTransformRotate( self.imageV.transform, rotation.rotation);
    
    // 复位,只要想相对于上一次旋转就复位
    rotation.rotation = 0;
    
}


//长按的时候调用
// 什么时候调用:长按的时候调用,而且只要手指不离开,拖动的时候会一直调用,手指抬起的时候也会调用
- (void)longPress:(UILongPressGestureRecognizer *)longPress
{
    
    if (longPress.state == UIGestureRecognizerStateBegan) {
       
        //设置透明度
       [UIView animateWithDuration:0.25 animations:^{
            self.imageV.alpha = 0;
           
       }completion:^(BOOL finished) {
           
           [UIView animateWithDuration:0.25 animations:^{
               
               self.imageV.alpha = 1;
           }completion:^(BOOL finished) {
               
               //对当前的View截屏
               //1.开启一个位图上下文
               UIGraphicsBeginImageContext(self.bounds.size);
               
               CGContextRef ctx = UIGraphicsGetCurrentContext();
               [self.layer renderInContext:ctx];
               
               //从上下文当中生成一张新的图片
               UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
               
               //调用代理方法
               if ([self.delegate respondsToSelector:@selector(handleView:newImage:)]) {
                   [self.delegate handleView:self newImage:newImage];
               }
               
            
               //移除当前View
               [self removeFromSuperview];
               
               //关闭上下文
               UIGraphicsEndImageContext();
               
               
           }];
           
       }];
        
        
    }
    
}

//拖动的时候调用
- (void)pan:(UIPanGestureRecognizer *)pan{
    
    CGPoint transP = [pan translationInView:pan.view];
    
    pan.view.transform = CGAffineTransformTranslate(pan.view.transform, transP.x, transP.y);
    //复位
    [pan setTranslation:CGPointZero inView:pan.view];
    
    
}

//能够同时支持多个手势
-(BOOL)gestureRecognizer:(nonnull UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(nonnull UIGestureRecognizer *)otherGestureRecognizer{
    
    return YES;
}

- (void)setImage:(UIImage *)image {
    _image = image;
    self.imageV.image = image;
}

@end

相关文章

网友评论

      本文标题:iOS画板上画图片补充

      本文链接:https://www.haomeiwen.com/subject/kztatdtx.html