美文网首页
横向转动的scrollview截屏问题

横向转动的scrollview截屏问题

作者: SuperZico | 来源:发表于2016-05-19 18:23 被阅读185次

先放出uiview的截图方法,如下

-(UIImage*)captureView:(UIView *)theView{
    CGRect rect = theView.frame;
    if ([theView isKindOfClass:[UIScrollView class]]) {
        rect.size = ((UIScrollView *)theView).contentSize;
    }
    
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [theView.layer renderInContext:context];
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;
}

这个方法随便都能百度到,就不说了
然后是UIScrollView:

- (UIImage *)captureScrollView:(UIScrollView *)scrollView{
    UIImage* image = nil;
    UIGraphicsBeginImageContext(scrollView.contentSize);
    {
        CGPoint savedContentOffset = scrollView.contentOffset;
        CGRect savedFrame = scrollView.frame;
        scrollView.contentOffset = CGPointZero;
        scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height);
         
        [scrollView.layer renderInContext: UIGraphicsGetCurrentContext()];
        image = UIGraphicsGetImageFromCurrentImageContext();
         
        scrollView.contentOffset = savedContentOffset;
        scrollView.frame = savedFrame;
    }
    UIGraphicsEndImageContext();
     
    if (image != nil) {
        return image;
    }
    return nil;
}

这个方法也是随便就能百度到的方法了,我下面要说的是scrollview横向滚动时用上面方法会遇到的问题
因为横向滚动的时候布局方式会发生变化,所以用上面的代码截取的图片和在app里运行时看到的其实是不一样的,之前我做项目用到过collectionview,我在app里运行时一列是有4个cell的,但是截取出来的图片上却是一列3个,当我在cell上按顺序标上数字之后,可以很明显的发现本来在第一列最下面的no.4跑到了第二列no.1,也就是说cell是顺延后退的。
因此我发现了上面的那个代码其实是让你的scrollview里的布局重新在图片上布局了一遍,而因为截取的图片宽高是设备的宽高,而app里因为有navigation的原因并不是设备的宽高,所以布局全都打乱了,比如本来是320,代码获取的会是288,y的偏移量变成-32。
所以为了不被打乱布局,我们要把代码里的

CGPoint savedContentOffset = scrollView.contentOffset;

给注销,然后把

_collectionView.frame = CGRectMake(0, 0, _collectionView.contentSize.width, 320);

写死就可以了。
当然布局里的限制要写好,不然写死了也不会保证布局不偏移。

相关文章

网友评论

      本文标题:横向转动的scrollview截屏问题

      本文链接:https://www.haomeiwen.com/subject/drygrttx.html