gpt4 book ai didi

iphone - UIImageView 带有大图像。问题

转载 作者:行者123 更新时间:2023-11-29 04:34:55 25 4
gpt4 key购买 nike

我想实现 iPhone 照片应用程序(默认 iPhone 应用程序)。当我想加载大图像(2500 * 3700)时,我遇到了困难。当我想从一张图像滚动到另一张图像时,我会看到类似卡顿的现象。要显示图像,我使用苹果网站的 ImageScrollView 它有显示方法:ImageScrollView.m

- (void)displayImage:(UIImage *)image
{
// clear the previous imageView
[imageView removeFromSuperview];
[imageView release];
imageView = nil;

// reset our zoomScale to 1.0 before doing any further calculations
self.zoomScale = 1.0;
self.imageView = [[[UIImageView alloc] initWithImage:image] autorelease];
[self addSubview:imageView];

self.contentSize = [image size];
[self setMaxMinZoomScalesForCurrentBounds];
self.zoomScale = self.minimumZoomScale;
}

- (void)setMaxMinZoomScalesForCurrentBounds
{
CGSize boundsSize = self.bounds.size;
CGSize imageSize = imageView.bounds.size;

// calculate min/max zoomscale
CGFloat xScale = boundsSize.width / imageSize.width; // the scale needed to perfectly fit the image width-wise
CGFloat yScale = boundsSize.height / imageSize.height; // the scale needed to perfectly fit the image height-wise
CGFloat minScale = MIN(xScale, yScale); // use minimum of these to allow the image to become fully visible

// on high resolution screens we have double the pixel density, so we will be seeing every pixel if we limit the
// maximum zoom scale to 0.5.
CGFloat maxScale = 1.0 / [[UIScreen mainScreen] scale];

// don't let minScale exceed maxScale. (If the image is smaller than the screen, we don't want to force it to be zoomed.)
if (minScale > maxScale) {
minScale = maxScale;
}

self.maximumZoomScale = maxScale;
self.minimumZoomScale = minScale;
}

对于我的应用程序,我有 600*600 的图像,我首先显示它们。当用户滚动到下一个图像时,他只能看到 600*600 的图像。然后在后台加载 3600 * 3600 图像

[operationQueue addOperationWithBlock:^{
UIImage *image = [self getProperBIGImage];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
ImageScrollView *scroll = [self getCurrentScroll];
[scroll displayImage:newImage];
}];
}];

我发现,当图像尺寸为 3600 * 3600 并且我想在 640 * 960 屏幕中显示图像时,iPhone 浪费了 1 秒的主队列时间来缩放图像,这就是为什么我无法滚动到这 1 秒内的下一张图像。

我想要缩放图像,因为我需要用户能够缩放该图像。我尝试使用这种方法,但这没有帮助。

我看到一些可能的解决方案:

1)在后台提供 UIImageView 中图像的缩放(但我知道,UI 应该仅在主线程中更改)

2)使用 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollViewCalled 在开始时仅显示 600 * 600 图像,然后在用户尝试缩放时加载大图像(但我尝试了这个,我会松动1秒,当我尝试用bigImage初始化UIImageView然后返回这个UIImageView;我什至无法实现它,因为我看到糟糕的 ScrollView ,其中滚动行为是错误的(很难解释),当我尝试返回不同的不同比例的 View )

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollViewCalled
{
if (!zooming)
{
ImageScrollView *scroll = (ImageScrollView *)scrollViewCalled;
UIImageView *imageView = (UIImageView *)[scroll imageView];
return imageView;
}
else
{
UIImageView *bigImageView = [self getBigImageView];
return bigImageView;
}
}

最佳答案

不幸的是,该图像太大,iPhone 无法处理。我知道在 iPad 上,限制大致是设备屏幕的尺寸。如果大于此值,则必须使用 CATiledLayer。

我会看一下从 2010 年开始的过去三年的 WWDC UIScrollView 演示。其中,他们讨论了在 iPhone 上处理大图像的方法。示例代码也将帮助您上路。

祝你好运!

关于iphone - UIImageView 带有大图像。问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11190352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com