截取屏幕並且保存到相冊
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
btn.center = CGPointMake(100, 200);
[btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
myview = [[UIImageView alloc]initWithFrame:CGRectMake(10, 30, 300, 200)];
[self.view addSubview:myview];
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(20, 40, 280, 30)];
label.text = @"我是黃成都,這是我的截屏保存演練";
[self.view addSubview:label];
}
-(void)btnClick
{
UIImage *image = [self makeImageWithView:self.view];
myview.image = image;
[self saveImageToPhotos:image];
}
//截屏
- (UIImage *)makeImageWithView:(UIView *)view
{
CGSize s = view.bounds.size;
// 下面方法,第一個參數表示區域大小。第二個參數表示是否是非透明的。如果需要顯示半透明效果,需要傳NO,否則傳YES。第三個參數就是屏幕密度了,關鍵就是第三個參數。
// float scale = [[UIScreenmainScreen] scale];//得到設備的分辨率
// scale = 1; 的時候是代表當前設備是320*480的分辨率(就是iphone4之前的設備)
// scale = 2; 的時候是代表分辨率為640*960的分辨率
NSLog(@"%f",[UIScreen mainScreen].scale);
//繪圖
UIGraphicsBeginImageContextWithOptions(s, NO, [UIScreen mainScreen].scale);
//渲染
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
//生產圖片
UIImage*image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
//保存圖片到相框
- (void)saveImageToPhotos:(UIImage *)savedImage
{
// image
// 要保存到用戶設備中的圖片
// completionTarget
// 當保存完成後,回調方法所在的對象
// completionSelector
// 當保存完成後,所調用的回調方法。 形式如下:
// - (void) image: (UIImage *) image
//didFinishSavingWithError: (NSError *) error
//contextInfo: (void *) contextInfo;
// contextInfo
// 可選的參數,保存了一個指向context數據的指針,它將傳遞給回調方法。
UIImageWriteToSavedPhotosAlbum(savedImage,self, @selector(image:didFinishSavingWithError:contextInfo:),NULL);
}
- (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo
{
NSString *msg = nil ;
if(error != NULL){
msg = @"保存圖片失敗" ;
}else{
msg = @"保存圖片成功" ;
}
NSLog(@"%@", msg);
}