UIScrollView
2018-10-10 本文已影响10人
秀才不才
ScrollView 截长图
TableVie截长图
-(UIImage *)getTableViewimage{
UIImage* viewImage = nil;
UITableView *scrollView = self.tableView;
UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, scrollView.opaque, 0.0);
{
CGPoint savedContentOffset = scrollView.contentOffset;
CGRect savedFrame = scrollView.frame;
scrollView.contentOffset = CGPointZero;
scrollView.frame = CGRectMake(0, -savedContentOffset.y, scrollView.contentSize.width, scrollView.contentSize.height);
[scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
viewImage = UIGraphicsGetImageFromCurrentImageContext();
scrollView.contentOffset = savedContentOffset;
scrollView.frame = savedFrame;
}
UIGraphicsEndImageContext();
return viewImage;
}
此方法在首次调用的时候 scrollView.contentSize
获取不正确…….,试了下在调用之前先执行下这个就可以了
[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:self.dataArray.count-1 inSection:0] atScrollPosition:UITableViewScrollPositionNone animated:NO];
对于Cell有图片的情况下 截图需谨慎,避免图片未加载完成,需要加延迟处理
- (void)captureClick {
UITableView *tableView = self.myTableView;
CGPoint savedContentOffset = tableView.contentOffset;
CGRect savedFrame = tableView.frame;
tableView.contentOffset = CGPointZero;
[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:self.dataArray.count-1 inSection:0] atScrollPosition:UITableViewScrollPositionNone animated:NO];
tableView.frame = CGRectMake(0, -savedContentOffset.y, tableView.contentSize.width, tableView.contentSize.height);
WeakObj(self);
//add a HUD
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//remove HUD
[selfWeak getCapture];
tableView.contentOffset = savedContentOffset;
tableView.frame = savedFrame;
});
}
//截图
- (void)getCapture
{
UIImage* viewImage = nil;
UITableView *tableView = self.myTableView;
UIGraphicsBeginImageContextWithOptions(tableView.contentSize, tableView.opaque, 0.0);
[tableView.layer renderInContext: UIGraphicsGetCurrentContext()];
viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//其他处理
}
MARK