gpt4 book ai didi

iphone - UIImage 在 iPhone 中不滚动

转载 作者:行者123 更新时间:2023-12-03 18:56:31 26 4
gpt4 key购买 nike

我是 iPhone 开发者新手,

我想在我的图像中滚动,

这是我的代码片段,

- (void)viewDidLoad {
UIImage *image1 = [UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"bg.png"]];
self.imageView = [[UIImageView alloc] initWithImage:image1];
self.imageView.frame = (CGRect){.origin=CGPointMake(0.0f, 0.0f), .size=image1.size};
[self.scrollView addSubview:self.imageView];
self.scrollView.contentSize = image.size;

[self centerScrollViewContents];
}


- (void)centerScrollViewContents {
CGSize boundsSize = self.scrollView.bounds.size;
CGRect contentsFrame = self.imageView.frame;

if (contentsFrame.size.width < boundsSize.width) {
contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0f;
} else {
contentsFrame.origin.x = 0.0f;
}

if (contentsFrame.size.height < boundsSize.height) {
contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0f;
} else {
contentsFrame.origin.y = 0.0f;
}

self.imageView.frame = contentsFrame;
}

- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView {
// Return the view that you want to zoom
return self.imageView;
}

而且 bg.png 没有应用到我的背景。

任何帮助将不胜感激。

最佳答案

答案实际上是许多其他答案和评论的组合,再加上一些其他调整。

  1. 正如潘所说,你需要设置你的scrollView委托(delegate)。否则,你的viewForZoomingInScrollView:不会调用委托(delegate)实现。我已经在 viewDidLoad: 中提供了这个调用,尽管你也可以 Hook 这个在界面构建器或 Storyboard中。
  2. 正如 Teodor Carstea 在原帖评论中所说,在您的原始代码,您正在设置您的 .imageView.size 和您的.scrollView.contentsSize 完全相同。你不需要设置 .imageView.frame. 的代码将作为initWithImage:。这将使尺寸不同。
  3. 您确实需要将 .scrollView.contentSize 设置为 image.size 。在哪里做这件事很重要,至少就必须这样做而言发生在设置缩放比例之前。
  4. 正如 Kunal Balani 提到的,你必须启用scrollingEnabled,尽管你可以在 Storyboard或界面生成器中设置它。
  5. 正如 MidhunMP 所说,你必须有 .userInteractionEnabled = YES,不过一般来说,这些是在 Storyboard/界面生成器中设置的默认值,所以我不会将它们包含在下面的代码更改中。
  6. 您的方法centerScrollViewContents并没有真正使内容居中就像它正在 reshape imageView 框架一样。我只是简单地注释掉了打电话,因为我认为这是完全没有必要的。相反,我做了一个简单的调用即可在左上角启动图像。
  7. 如果您只想滚动,请设置 zoomScaleminimumZoomScale 和maximumZoomScale 不是必需的。如果您还想缩放,那么您需要将这三个设置全部设置在适当的位置。
  8. 如果 View 小于内容,您似乎确实想要拉伸(stretch) View 界限。如果这确实是一个问题(即如果您知道您的 bg.png 是这样小到需要拉伸(stretch)),然后计算 contentFrame 为图像框的宽度比例和高度比例分别取其中的一个这些更大的将是您的新 ZoomScale,您将能够滚动在另一个方向。或者,还有其他方法来决定您想要的方式该规模集。搜索 stackoverflow.com 以获取其他设置答案根据需要缩放比例。

这是应用这些项目后的代码。

(void)viewDidLoad {
self.scrollView.delegate = self; // can be set in storyboard
self.scrollView.scrollingEnabled = YES; // can be set in storyboard
NSString* bgPng
= [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"bg.png"];
UIImage *image1 = [UIImage imageWithContentsOfFile:bgPng];
self.imageView = [[UIImageView alloc] initWithImage:image1];
// self.imageView.frame = (CGRect){.origin=CGPointMake(0.0f, 0.0f), .size=image1.size};
[self.scrollView addSubview:self.imageView];
self.scrollView.contentSize = image.size;

// set zoom scale here if desired.

// if zoom is implemented, the following call should be made
// after setting .zoomScale, .minimumZoomScale & .maximumZoomScale
self.scrollView.contentOffset = CGPointZero;

// [self centerScrollViewContents];
}


//- (void)centerScrollViewContents {
// CGSize boundsSize = self.scrollView.bounds.size;
// CGRect contentsFrame = self.imageView.frame;
//
// if (contentsFrame.size.width < boundsSize.width) {
// contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0f;
// } else {
// contentsFrame.origin.x = 0.0f;
// }
//
// if (contentsFrame.size.height < boundsSize.height) {
// contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0f;
// } else {
// contentsFrame.origin.y = 0.0f;
// }
//
// self.imageView.frame = contentsFrame;
//}

- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView {
// Return the view that you want to zoom
return self.imageView;
}

关于iphone - UIImage 在 iPhone 中不滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11559899/

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