- 業務邏輯:為需要切圖的view添加pan手勢,定義一個需要截取范圍視圖的成員屬性,定義一個成員變量用來記錄手指的開始點,在pan方法中,根據手勢的狀態,獲取矩形框的開始起點和結束點,然后根據起點和終點,獲取截取范圍,然后開啟位圖上下文,設置裁剪區域,把內容渲染到上下文,獲取新的圖片,結束上下文,最后刪除截取范圍視圖,并值為nil,移除手勢
@interface ViewController ()
// 開始起點屬性
@property (nonatomic, assign) CGPoint startP;
// 截取范圍視圖
@property (nonatomic, weak) UIView *clipView;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
@implementation ViewController
- (UIView *)clipView
{
if (!_clipView) {
UIView *clipView = [[UIView alloc] init];
clipView.backgroundColor = [UIColor blackColor];
clipView.alpha = 0.5;
_clipView = clipView;
[self.view addSubview:_clipView];
}
return _clipView;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self addGesture];
}
- (void)addGesture
{
// 添加pan手勢
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
[self.view addGestureRecognizer:pan];
}
#pragma mark - pan手勢
- (void)pan:(UIPanGestureRecognizer *)pan
{
CGPoint endP = CGPointZero;
// 獲取矩形框的開始起點
if (pan.state == UIGestureRecognizerStateBegan) {
// 獲取一開始觸摸點
self.startP = [pan locationInView:self.view];
}else if (pan.state == UIGestureRecognizerStateChanged)
{
// 獲得結束那一時刻的點
endP = [pan locationInView:self.view];
// 根據起點和終點,獲取截取范圍
CGFloat w = endP.x - self.startP.x;
CGFloat h = endP.y - self.startP.y;
CGRect clipRect = CGRectMake(self.startP.x, self.startP.y, w, h);
self.clipView.frame = clipRect;
}else if (pan.state == UIGestureRecognizerStateEnded)
{
// 開啟上下文
UIGraphicsBeginImageContextWithOptions(self.imageView.bounds.size, NO, 0);
// 設置裁剪區域
UIBezierPath *path = [UIBezierPath bezierPathWithRect:self.clipView.frame];
[path addClip];
// 把內容渲染到上下文
[self.imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
// 獲取新的圖片
self.imageView.image = UIGraphicsGetImageFromCurrentImageContext();
// 結束上下文
UIGraphicsEndImageContext();
// 刪除clipView視圖
[self.clipView removeFromSuperview];
self.clipView = nil;
[self.view removeGestureRecognizer:pan];
}
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。