滚动视图中的 UIImage 太大
UIImage in scrollview too big
我正在尝试在滚动视图中显示 UIImage。该图像比滚动视图大得多,因此它仅显示图像的左上角。然后我可以缩放/重新排列图像以更好地适应,但我希望它显示整个图像,居中并适合内部。然后用户可以根据需要进行缩放,但默认情况下应显示整个图像。
这是我的代码(它下载图像):
UIImage *trackImg = [UIImage imageWithContentsOfFile:trackImagePath];
/* Scrollview! */
imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[imgView setImage:trackImg];
[[self scrImageViewer] addSubview:imgView];
_scrImageViewer.delegate = self;
_scrImageViewer.contentSize = trackImg.size;
_scrImageViewer.contentOffset = CGPointMake(trackImg.size.width/2, trackImg.size.height/2);
_scrImageViewer.minimumZoomScale = 1;
_scrImageViewer.maximumZoomScale = 4;
_scrImageViewer.zoomScale = 2;
_scrImageViewer.clipsToBounds = YES;
CGFloat newContentOffsetX = (_scrImageViewer.contentSize.width - _scrImageViewer.frame.size.width) / 2;
CGFloat newContentOffsety = (_scrImageViewer.contentSize.height - _scrImageViewer.frame.size.height) / 2;
_scrImageViewer.contentOffset = CGPointMake(newContentOffsetX, newContentOffsety);
同样,它只显示图像的左上角。我想让它显示整个图像。
谢谢:)
在这张图片中你可以看到一个小的scrollView(那个方块就是scrollview的大小)里面有一个非常大的图片(高度是1280,scroll view只有100)。您唯一需要做的就是将图像的约束添加到它的超级视图 (scrollView),在我的例子中,我添加了所有 0(顶部、前导、尾随和底部)并且 imageView 模式是中心。当然,您需要将滚动视图的约束添加到其超级视图,在本例中为视图。
如果您还需要以编程方式添加 imageView,如果您不能使用插座,您可以对代码进行这些更改,但我强烈建议您使用故事板解决方案:
imgView = [[UIImageView alloc] initWithImage:trackImg];
[self.scrImageViewer addSubview:imgView];
[imgView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.scrImageViewer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:@{ @"view": imgView }]];
[self.scrImageViewer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:@{ @"view": imgView }]];
[self.view layoutIfNeeded];
我正在尝试在滚动视图中显示 UIImage。该图像比滚动视图大得多,因此它仅显示图像的左上角。然后我可以缩放/重新排列图像以更好地适应,但我希望它显示整个图像,居中并适合内部。然后用户可以根据需要进行缩放,但默认情况下应显示整个图像。
这是我的代码(它下载图像):
UIImage *trackImg = [UIImage imageWithContentsOfFile:trackImagePath];
/* Scrollview! */
imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[imgView setImage:trackImg];
[[self scrImageViewer] addSubview:imgView];
_scrImageViewer.delegate = self;
_scrImageViewer.contentSize = trackImg.size;
_scrImageViewer.contentOffset = CGPointMake(trackImg.size.width/2, trackImg.size.height/2);
_scrImageViewer.minimumZoomScale = 1;
_scrImageViewer.maximumZoomScale = 4;
_scrImageViewer.zoomScale = 2;
_scrImageViewer.clipsToBounds = YES;
CGFloat newContentOffsetX = (_scrImageViewer.contentSize.width - _scrImageViewer.frame.size.width) / 2;
CGFloat newContentOffsety = (_scrImageViewer.contentSize.height - _scrImageViewer.frame.size.height) / 2;
_scrImageViewer.contentOffset = CGPointMake(newContentOffsetX, newContentOffsety);
同样,它只显示图像的左上角。我想让它显示整个图像。
谢谢:)
在这张图片中你可以看到一个小的scrollView(那个方块就是scrollview的大小)里面有一个非常大的图片(高度是1280,scroll view只有100)。您唯一需要做的就是将图像的约束添加到它的超级视图 (scrollView),在我的例子中,我添加了所有 0(顶部、前导、尾随和底部)并且 imageView 模式是中心。当然,您需要将滚动视图的约束添加到其超级视图,在本例中为视图。
如果您还需要以编程方式添加 imageView,如果您不能使用插座,您可以对代码进行这些更改,但我强烈建议您使用故事板解决方案:
imgView = [[UIImageView alloc] initWithImage:trackImg];
[self.scrImageViewer addSubview:imgView];
[imgView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.scrImageViewer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:@{ @"view": imgView }]];
[self.scrImageViewer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:@{ @"view": imgView }]];
[self.view layoutIfNeeded];