0

我正在放大一个UIImageView双击UIScrollView。在 Interface Builder 中设置时工作正常。我在这里看到的神奇之处在于,contentSizescrollView我放大/缩小时,它会自行增加/减少。我检查contentSizein viewDidLoad,它不是零。

scrollView我通过从 IB 中删除andimageView并以编程方式创建它们来尝试相同的方法。添加imageViewand后tapGestureRecognizer,我无法在此处缩放。当我检查原因时,contentSize到处都是零。

当我在 IB/xib 中添加它们时,我对contentSize. 我没有在任何地方设置它。我发现它工作正常,contentSize在我需要的地方自动调整。scrollView但是,当我以编程方式创建它时,它并没有复制。

我怎样才能让它工作?我欢迎你的建议。

这是我的参考代码。

在 IB 中创建的 ScrollView

- (void)viewDidLoad {
    [super viewDidLoad];

    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
    [doubleTap setNumberOfTapsRequired:2];
    [imageView addGestureRecognizer:doubleTap];
    imageScrollView.minimumZoomScale=1.01;
    imageScrollView.maximumZoomScale=5;
    imageScrollView.zoomScale=1.01;
    NSLog(@"height = %f width = %f", imageScrollView.contentSize.height, imageScrollView.contentSize.width);
}

NSLog 说

height = 449.479767 width = 320.000000

以编程方式创建的 ScrollView

- (void)viewDidLoad {
    [super viewDidLoad];

    imageScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
    [doubleTap setNumberOfTapsRequired:2];
    [imageView addGestureRecognizer:doubleTap];
    imageScrollView.minimumZoomScale=1.01;
    imageScrollView.maximumZoomScale=5;
    imageScrollView.zoomScale=1.01;

    [self.view addSubview:imageScrollView];
    [self.imageScrollView addSubview:imageView];
    NSLog(@"height = %f width = %f", imageScrollView.contentSize.height, imageScrollView.contentSize.width);
}

NSLog 说

height = 0.000000 width = 0.000000
4

3 回答 3

1

这些属性

self.minimumZoomScale=1.01;
self.maximumZoomScale=5;
self.zoomScale=1.01;

应该是你的滚动视图的属性:

imageScrollView.minimumZoomScale=1.01;
imageScrollView.maximumZoomScale=5;
imageScrollView.zoomScale=1.01;

然后您还需要设置 contentSize 属性(使用 IB 时,您不需要设置它,因为它是从 xib 文件加载的):

imageScrollView.contentSize = CGSizeMake(width,height);

使用适当的值。

此外,您需要设置委托:

imageScrollView.delegate = self;

并且至少有一个委托方法指示要缩放哪个子视图:

 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
   return scrollView.subviews[0];
}

(实际上最好在子视图上设置标签或将其分配给属性以获取对它的引用,因为滚动视图也具有内置子视图)

于 2013-07-25T07:51:17.803 回答
0

@Pheel 给出了关于使用编码在滚动视图内缩放图像的类似答案。

答案链接如下:

IOS:在滚动视图中添加图像视图以进行缩放

于 2013-07-26T07:33:26.020 回答
0

您的 xib 中是否启用了自动布局?如果是这样,IB 将在图像视图和滚动视图之间设置约束,并且在运行时自动布局使用约束来设置滚动视图的内容大小。当您在代码中创建视图时,您没有添加足够的约束并且没有直接设置内容大小,因此内容大小保持为零。

阅读技术说明 TN2154了解更多信息。

于 2013-07-25T08:07:17.677 回答