加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 在UIScrollview中使用大图像块线程添加UIImageVi

发布时间:2020-12-16 06:55:11 所属栏目:百科 来源:网络整理
导读:我在UI ImageView中加载一个图像,然后我将其添加到UIScrollView中. 图像是局部图像,高度约为5000像素. 问题是,当我将UIImageView添加到UIScrollView时,线程被阻止. 很明显,因为当我这样做时,我无法滚动UIScrollView直到显示图像. 这是一个例子. UIScrollView
我在UI ImageView中加载一个图像,然后我将其添加到UIScrollView中.
图像是局部图像,高度约为5000像素.

问题是,当我将UIImageView添加到UIScrollView时,线程被阻止.
很明显,因为当我这样做时,我无法滚动UIScrollView直到显示图像.

这是一个例子.

UIScrollView *myscrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(0,768,1004)];
myscrollview.contentSize = CGSizeMake(7680,1004);
myscrollview.pagingEnabled = TRUE;

[self.view addSubview:myscrollview];

NSString* str = [[NSBundle mainBundle] pathForResource:@"APPS.jpg" ofType:nil inDirectory:@""];
NSData *imageData = [NSData dataWithContentsOfFile:str];
UIImageView *singleImageView = [[UIImageView alloc] initWithImage:[UIImage imageWithData:imageData]];

    //the line below is the blocking line
[scrollView addSubview:singleImageView];

它是脚本中阻止滚动条的最后一行.当我把它留下来时,一切都很完美,除了图像当然没有显示的事实.

我似乎记得使用多线程对UIView操作不起作用,所以我猜这是不可能的.

谢谢你的帮助.

解决方法

如果您要提供这些大图像,您应该查看CATiledLayer;有一个关于如何在WWDC 2010中使用它的精彩演示视频.

如果这些不是您的图像,并且您无法对它们进行缩减采样或将其分解为切片,则可以在后台线程上绘制图像.您可能无法在任何主线程上绘制屏幕图形上下文,但主线程,但这不会阻止您绘制到非屏幕图形上下文.在你的后台线程上你可以

>使用CGBitmapContextCreate创建绘图上下文
>就像在drawRect中绘制到屏幕上一样绘制图像:
>当您完成加载并绘制图像时,使用performSelectorOnMainThread:withObject:waitUntilDone在主线程上调用视图的drawRect:方法:

在视图的drawRect:方法中,一旦在内存上下文中完全绘制了图像,就可以使用CGBitmapContextCreateImage和CGContextDrawImage将其复制到屏幕上.

这不是一件轻而易举的事,你需要在合适的时间启动你的后台线程,同步访问你的图像等等.如果你能找到一种方法来操作图像来实现,那么CATiledLayer方法几乎肯定是更好的方法.工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读