5

我是 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没有应用于我的背景。

任何帮助将不胜感激。

4

8 回答 8

4

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

  1. 正如潘所说,你需要设置你的滚动视图委托。否则,您的 viewForZoomingInScrollView: 委托实现将不会被调用。我已经在 viewDidLoad: 中提供了这个调用,尽管你也可以在界面构建器或故事板中连接它。
  2. 正如 Teodor Carstea 在对原始帖子的评论中所说,在您的原始代码中,您将您的.imageView.size和您 的设置.scrollView.contentsSize为完全相同的东西。您不需要设置.imageView.frame. 将作为 initWithImage:. 这将使尺寸不同。
  3. 您确实需要将 设置.scrollView.contentSizeimage.size. 您在哪里执行此操作很重要,至少在设置缩放比例之前必须发生。
  4. 正如 Kunal Balani 提到的,您必须启用滚动,尽管您可以在情节提要或界面构建器中设置它。
  5. 正如 MidhunMP 所说,您必须拥有.userInteractionEnabled = YES,尽管通常这些是在故事板/界面生成器中设置的默认值,所以我不会将它们包含在下面的代码更改中。
  6. 您的方法centerScrollViewContents并没有真正使内容居中,而是重新塑造 imageView 框架。我只是简单地注释掉了这个电话,因为我认为这完全没有必要。相反,我做了一个简单的调用,在左上角开始你的图像。
  7. 如果您只想滚动,则设置zoomScale,minimumZoomScalemaximumZoomScale不是必需的。如果您还想捏合缩放,那么您需要将所有这三个设置在适当的位置。
  8. 如果视图小于内容范围,您似乎确实想要拉伸视图。如果这确实是一个问题(即,如果您知道您的 bg.png 太小以至于需要拉伸),则分别计算 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;
}
于 2012-07-31T18:43:20.657 回答
1

好吧,试试这个:

UIImageView *tempImgv = [[[UIImageView alloc]init] autorelease];
    [tempImgv setImage:[UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/bg.png", [[NSBundle mainBundle]resourcePath]]]];
    [tempImgv setFrame:your_desired_frame];
    self.imageView = tempImgv;
    [self.scrollWiew setContentSize: size_greater_than_scroll_frame];
    [self.scrollWiew addSubview:self.imageView];
于 2012-07-19T11:31:01.007 回答
1

首先检查您的滚动视图框架。仅当帧大小 < contentsize 时才会启用滚动。因为如果所有内容都在框架中可见,那么你为什么需要滚动呢?

试试这个 :

UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0,
                 self.view.frame.size.width, self.view.frame.size.height)];
    //用你拥有的任何框架初始化

  scroll.scrollEnabled = YES // 这是小鬼...不要忽略这个

   //无论你的代码是什么

    self.scrollView.contentSize = image.size;// 这是错误的

    //contentSize 属性为可滚动内容的大小。这指定了可滚动区域的大小。
    // 做这个
    self.scrollView.contentSize = imageView.frame.size;

于 2012-07-25T22:33:14.647 回答
0

将图像视图和滚动视图的用户交互启用属性设置为是。请检查此代码,

- (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};
    imageView.userInteractionEnabled = YES;
    scrollView.userInteractionEnabled = YES;
    [self.scrollView addSubview:self.imageView];
    self.scrollView.contentSize = image.size;

    [self centerScrollViewContents];
}

如果您需要将图像设置为滚动视图的背景,请使用:self.scrollView.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"bg.png"]]];

于 2012-07-19T16:43:34.433 回答
0

在上面的代码中,您提供了

    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;

您设置的滚动视图的内容大小等于图像的大小,即上面的粗体代码。尝试使用以下代码。

CGSize sizeOfScroll = image.size;
sizeOfScroll.width *= 1.5f;
sizeOfScroll.height *= 1.5f;

self.scrollView.contentSize = sizeOfScroll;
于 2012-07-25T05:16:38.957 回答
0

滚动图像

scroll.userinteractionEnable = YES;

然后,

self.scrollView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"image.png"]]];
于 2012-07-30T18:12:18.243 回答
0

在上面的代码中,您需要设置最小和最大缩放比例。

http://developer.apple.com/library/ios/#DOCUMENTATION/WindowsViews/Conceptual/UIScrollView_pg/ZoomZoom/ZoomZoom.html

self.scrollView.minimumZoomScale=0.5;
self.scrollView.maximumZoomScale=6.0;
于 2012-07-31T10:24:06.920 回答
0

您是否在其他地方设置了滚动视图委托?
像这样:self.scrollView.delegate = self;

于 2012-07-31T15:22:33.733 回答