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

上一篇下一篇

猜你喜欢

热点阅读