我想创建一个滚动视图,其工作方式与您在照片应用中平移/缩放图像完全一样:
- 横向图像适合纵向屏幕,
- 您可以放大图像,
- 如果您旋转设备放大(横向),图像仍然在中间,
- 当您缩小时,图像仍然适合新的横向屏幕(拉伸全屏)。
因此,我需要同时满足宽高比和缩放功能。
我已经实现了一个解决方案,我在 layoutSubviews 中“手动”布局 scrollView 的内容以使外观适合,但这会干扰缩放行为。
有没有一种简洁的 UIKit 方法来处理这个问题?或者我必须在这里创建自己的实现?
我想创建一个滚动视图,其工作方式与您在照片应用中平移/缩放图像完全一样:
- 横向图像适合纵向屏幕,
- 您可以放大图像,
- 如果您旋转设备放大(横向),图像仍然在中间,
- 当您缩小时,图像仍然适合新的横向屏幕(拉伸全屏)。
因此,我需要同时满足宽高比和缩放功能。
我已经实现了一个解决方案,我在 layoutSubviews 中“手动”布局 scrollView 的内容以使外观适合,但这会干扰缩放行为。
有没有一种简洁的 UIKit 方法来处理这个问题?或者我必须在这里创建自己的实现?
您需要启用缩放(并设置最小和最大缩放比例),然后实现 scrollViewDidZoom。这是一些示例代码,可帮助您开始处理图像居中。您可以对其进行调整以执行其他部分:
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
CGSize boundsSize = scrollView.bounds.size;
CGRect frameToCenter = imageView.frame;
// center horizontally
if (frameToCenter.size.width < boundsSize.width)
frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width) / 2;
else
frameToCenter.origin.x = 0;
// center vertically
if (frameToCenter.size.height < boundsSize.height)
frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height) / 2;
else
frameToCenter.origin.y = 0;
imageView.frame = frameToCenter;
}
注意:此代码假定您在 UIScrollView 中保留对 UIImageView(本例中为 imageView)的引用。