iOS陸哥開發筆記(二十) (Quartz2D屏幕截圖)

簡介: 

在程序開發中,有時候需要截取屏幕上的某一塊內容.

完成截屏功能的核心代碼:- (void)renderInContext:(CGContextRef)ctx;調用某個view的layer的renderInContext:方法即可

storyboard界面搭建:



代碼: 


#import "ViewController.h"

#import "MBProgressHUD+MJ.h"


@interface ViewController ()

- (IBAction)cutScreen;


@end


@implementation ViewController


- (IBAction)cutScreen{    

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

        // 開啓上下文

        UIGraphicsBeginImageContextWithOptions(self.view.bounds.sizeNO0.0);

        CGContextRef ctx = UIGraphicsGetCurrentContext();

        // view繪製到圖形上下文中

        [self.view.layer renderInContext:ctx];

        

        // 取出圖片

        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

        

        // 結束上下文

        UIGraphicsEndImageContext();

        

        // 7.image對象壓縮爲PNG格式的二進制數據

        // NSData *data = UIImagePNGRepresentation(newImage);

        

        // 8.寫入文件

        // NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"new.png"];

        // [data writeToFile:path atomically:YES];

        

        // 9. 保存到相冊中

        //將截屏保存到相冊

        UIImageWriteToSavedPhotosAlbum(newImage, self@selector(image:didFinishSavingWithError:contextInfo:), nil);  

    });

}


// 系統建議使用的方法 

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo

{

    if (error) {

// 如果保存失敗,那麼提示失敗

        [MBProgressHUD showError:@"保存失敗"];

    }else

    {

// 如果圖片成功保存的話,那麼就提示保存成功。

        [MBProgressHUD showSuccess:@"保存成功"];

    }

}


API內容:



第一次保存到相冊中, 系統會提醒用戶, 點擊允許後,  如果出現保存成功的彈框, 就能在相冊中找到剛纔的截圖了



提示: 保存失敗常見有兩個原因:1是內存不夠,2是手機內部的權限不允許。
說明: 如果當一個應用程序想要訪問通訊錄或相冊,用戶已經明確拒絕過,那麼以後再要訪問的話會直接拒絕。這個時候,可以提示用戶去開啓權限
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章