为什么在缩放时调整UIScrollView的contentSize?

时间:2014-11-13 23:06:32

标签: ios objective-c uiscrollview uiscrollviewdelegate

使用下面的代码,我看到一个红色方块,我可以滚动(因为scrollview的内容是4x屏幕)。

但是一旦我开始缩小(缩放< 1.0),滚动视图的contentSize会立即跳到iPad屏幕尺寸的scale倍。例如:

0.985783 757.081249 1009.441665

之后我再也无法移动广场了。当scale高于1.0时,我只能移动广场;在这种情况下,滚动指示器显示contentSize仍然是scale次屏幕尺寸。

另一个效果是,当缩小到1.0以下时,红色正方形通常会通过缩小向左上角移动。但是,在我释放屏幕后(没有任何进一步的缩放),它会进一步移动到角落。编辑:这必须是scrollview的橡皮筋。

(广场本身按预期进行扩展。)

我在这里缺少什么?这是我的视图控制器代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.scrollView                  = [[UIScrollView alloc]initWithFrame:self.view.bounds];
    self.scrollView.contentSize      = CGSizeMake(self.view.bounds.size.width * 2, self.view.bounds.size.height * 2);
    self.scrollView.backgroundColor  = [UIColor colorWithWhite:0.5f alpha:1.0f];
    self.scrollView.minimumZoomScale = 0.1f;
    self.scrollView.maximumZoomScale = 4.0f;
    self.scrollView.clipsToBounds    = YES;
    self.scrollView.delegate         = self;

    self.contentView = [[UIView alloc] initWithFrame:self.scrollView.bounds];
    [self.scrollView addSubview:self.contentView];
    [self.view addSubview:self.scrollView];

    UIView* view = [[UIView alloc] initWithFrame:CGRectMake(400, 400, 100, 100)];
    view.backgroundColor = [UIColor redColor];
    [self.contentView addSubview:view];
}

#pragma UIScrollViewDelegate

- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.contentView;
}

- (void)scrollViewDidEndZooming:(UIScrollView*)scrollView
                       withView:(UIView*)view
                        atScale:(double)scale
{
    NSLog(@"%f %f %f", scale, self.scrollView.contentSize.width, self.scrollView.contentSize.height);
}

0 个答案:

没有答案