主要代碼
UIView+Cutter.m
/**
* 根據(jù)視圖尺寸獲取視圖截屏
*
* @return UIImage 截取的圖片
*/
- (UIImage*)viewCutter
{
UIGraphicsBeginImageContextWithOptions(self.bounds.size,NO,[[UIScreen mainScreen] scale]);
// 方法一 有時(shí)導(dǎo)航條無法正常獲取
// [self.layer renderInContext:UIGraphicsGetCurrentContext()];
// 方法二 iOS7.0 后推薦使用
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage*img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
UIScrollView+Cutter.m
/**
* 根據(jù)視圖尺寸獲取視圖截屏(一屏無法顯示完整),適用于UIScrollView UITableviewView UICollectionView UIWebView
*
* @return UIImage 截取的圖片
*/
- (UIImage *)scrollViewCutter
{
//保存
CGPoint savedContentOffset = self.contentOffset;
CGRect savedFrame = self.frame;
self.contentOffset = CGPointZero;
self.frame = CGRectMake(0, 0, self.contentSize.width, self.contentSize.height);
UIImage *image = [self viewCutter];
//還原數(shù)據(jù)
self.contentOffset = savedContentOffset;
self.frame = savedFrame;
return image;
}
代碼示例
/*
// 使用說明
// 沒有導(dǎo)航和tabbar
UIImage *image = [self.view viewCutter];
// 有導(dǎo)航和tabbar
UIImage *image = [self.navigationController.view viewCutter];
// UICollectionView
UIImage *image = [self.collectionView scrollViewCutter];
// UITableView
UIImage *image = [self.tableView scrollViewCutter];
// UIWebView
UIImage *image = [self.webView scrollViewCutter];
*/
圖片示例:

Cutter-1

Cutter-2

Cutter-3
參考
https://developer.apple.com/library/ios/qa/qa1817/_index.html#//apple_ref/doc/uid/DTS40014134