在Xcode 5中,我创建了a universal app,UIScrollView
包含UIImageView
(此处fullscreen):
由于我在界面生成器中设置了所有UI属性(要显示的图像,UIImageView
尺寸为1000 x 1000像素,UIImageView
模式设置为“缩放到填充”) ,ViewController.m中的实际源代码非常简短:
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
/*
if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) {
_imageView.frame = CGRectMake(_imageView.frame.origin.x,
_imageView.frame.origin.y,
800, 800);
}
*/
_scrollView.contentSize = _imageView.bounds.size;
NSLog(@"%s: _scrollView %@ %@",
__PRETTY_FUNCTION__,
NSStringFromCGPoint(_scrollView.frame.origin),
NSStringFromCGSize(_scrollView.frame.size));
NSLog(@"%s: _imageView %@ %@",
__PRETTY_FUNCTION__,
NSStringFromCGPoint(_imageView.frame.origin),
NSStringFromCGSize(_imageView.frame.size));
}
这在iPhone和iPad上的效果令人惊讶(对我来说是iOS新手) - 应用程序甚至可以旋转。
然而,为iPhone显示的图像有点太大,需要按比例缩小才能更舒适地播放:
我希望,由于UIImageView
模式是“缩放到填充”,我只需要更改其frame
(或bounds
?我已尝试过两种方式) - 如上面显示的注释代码。
但这不起作用 - 滚动中断(无法再滚动到图像底部)。
请问任何建议?
(我也希望稍后添加一个双击和双击手势识别器 - 并在其中缩放UIImageView
。
更新
我已尝试通过将以下代码添加到viewDidLayoutSubviews
来关注Andrei的建议(谢谢!),但图片没有按比例缩小:
if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) {
_scrollView.maximumZoomScale = 1.2;
_scrollView.minimumZoomScale = .8;
_scrollView.zoomScale = .8;
}
答案 0 :(得分:1)
UIScrollView可以为您进行缩放以及捏合手势。
您只需在“minimumZoomScale”和“maximumZoomScale”属性中设置正确的值,它就会让用户在这些限制之间捏合。 您还需要实现
- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView
来自UIScrollViewDelegate的方法。它应该只返回imageView。
您还可以使用“zoomScale”属性设置缩放级别。
对于双击,您需要将自己的双击手势识别器添加到滚动视图,并在双击时增加缩放级别。
使用委托方法和双击手势更新。
答案 1 :(得分:1)
您一定要阅读 AutoLayout 。如果打开AutoLayout,则无法更改边框和边界。您当然可以将其关闭整个故事板。
问题的解决方案是约束。使用它们可以定义视图的相关方式,例如:UIScrollView
与其父视图的关系以及{{1}的方式}与您的UIImageView
。
详细了解以下链接的约束:
虽然UIScrollView
可以通过捏合来处理缩放,但您必须实现正确的委托方法:UIScrollView
。当然,您必须为viewForZoomingInScrollView:
和minimumZoomScale
设置正确的属性值。
有关以下链接的更多信息:
两个网站都有足够的信息和示例供您使用。首先尝试在这些网站上提供的代码,然后发布另一个更具体的问题,如果您遇到问题。