Ios 缩小放置在UIScrollView中的UIImageView
我在Xcode 5中创建了一个包含Ios 缩小放置在UIScrollView中的UIImageView,ios,iphone,uiscrollview,uiimageview,scale,Ios,Iphone,Uiscrollview,Uiimageview,Scale,我在Xcode 5中创建了一个包含UIImageView的uicrollView(此处): 由于我已在Interface Builder中设置了所有UI属性(要显示的图像、1000 x 1000像素的UIImageView尺寸和UIImageView模式设置为“按比例填充”),因此中的实际源代码非常短: - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; /* if (UI_USER_INTER
UIImageView
的uicrollView
(此处):
由于我已在Interface Builder中设置了所有UI属性(要显示的图像、1000 x 1000像素的UIImageView
尺寸和UIImageView
模式设置为“按比例填充”),因此中的实际源代码非常短:
- (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));
}
令人惊讶的是(对于我这个iOS新手来说)它在iPhone和iPad上运行得很好,而且这个应用甚至可以旋转
但是,iPhone显示的图像有点太大,需要缩小比例才能更舒适地播放:
我希望,既然UIImageView
模式是“按比例填充”,我只需要更改它的帧(或边界
?我已经尝试了这两种方法)-如上面显示的注释代码所示
但这不起作用-滚动中断(无法再滚动到图像底部)
有什么建议吗
(我还希望以后添加一个捏和双击手势识别器,并在其中缩放UIImageView
)
更新:
我已尝试按照Andrei的建议(谢谢!)将以下代码添加到viewDidLayoutSubviews
,但图像并未缩小:
if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) {
_scrollView.maximumZoomScale = 1.2;
_scrollView.minimumZoomScale = .8;
_scrollView.zoomScale = .8;
}
UIScrollView可以为您处理缩放以及捏手势
您只需要在“minimumZoomScale”和“maximumZoomScale”属性中设置适当的值,它将允许用户在这些限制之间切换。
您还需要实现
- (UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView
方法从UIScrollViewDelegate。它应该只返回imageView
还可以使用“zoomScale”属性设置缩放级别
对于双击,您需要将自己的双击手势识别器添加到scrollview,并在双击时增加缩放级别
使用委托方法和双击手势更新了。您必须明确阅读有关自动布局的内容。如果启用“自动布局”,则无法更改帧和边界。当然,你可以在整个情节提要中关闭它
问题的解决方案是约束。通过约束,您可以定义视图的关联方式,例如:UIScrollView
与其父视图的关联方式,UIImageView
与UIScrollView
的关联方式
阅读以下链接上的约束的更多信息:
虽然UIScrollView
可以为您处理带收缩的缩放,但您必须实现正确的委托方法:viewForZoomingInScrollView:
。当然,您必须为minimumZoomScale
和maximumZoomScale
设置正确的属性值
有关以下链接的更多信息:
这两个网站都有足够的信息和例子让你能够做到这一点。首先对这些网站上的代码进行实验,然后如果遇到问题,再发布另一个更具体的问题。+1谢谢,但是当我设置\u scrollView.zoomScale=.8
(请查看更新的问题)。是的,我的错,正如Legoless所说的,您还需要实现-(UIView*)viewForZoomingInScrollView:(UIScrollView*)来自UIScrollViewDelegate的scrollView{方法。它应该只返回imageView。我还更新了答案。