- 頭文件
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface ZQImageView : UIImageView
@end
NS_ASSUME_NONNULL_END
- 具體文件
#import "ZQImageView.h"
@interface ZQImageView ()
@property (nonatomic, assign) CGPoint beginPoint;
@property (nonatomic, strong) UIView *clipView;
@end
@implementation ZQImageView
- (UIView *)clipView{
if(_clipView==nil){
_clipView = [[UIView alloc]init];
_clipView.backgroundColor = [UIColor grayColor];
_clipView.alpha = 0.7;
[[self superview] addSubview:_clipView];
}
return _clipView;
}
- (instancetype)initWithFrame:(CGRect)frame{
if(self = [super initWithFrame: frame]){
self.userInteractionEnabled = YES;
UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(gestureRecognizer:)];
[self addGestureRecognizer:gestureRecognizer];
}
return self;
}
-(void)gestureRecognizer:(UIPanGestureRecognizer*)pan{
CGPoint cur = [pan locationInView:self];
if(pan.state == UIGestureRecognizerStateBegan){
self.beginPoint = cur;
}
if(pan.state == UIGestureRecognizerStateChanged){
CGFloat x = self.beginPoint.x;
CGFloat y = self.beginPoint.y;
CGFloat w = cur.x - self.beginPoint.x;
CGFloat H = cur.y - self.beginPoint.y;
self.clipView.frame = CGRectMake(x, y, w, H);
}
if(pan.state == UIGestureRecognizerStateEnded){
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0);
UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.clipView.frame];
[path addClip];
CGContextRef ctx = UIGraphicsGetCurrentContext();
[self.layer renderInContext:ctx];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.image = newImage;
[self.clipView removeFromSuperview];
self.clipView = nil;
}
}
@end
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。