ios - UIScrollView中的iOS编程缩放不起作用

Posted

技术标签:

【中文标题】ios - UIScrollView中的iOS编程缩放不起作用【英文标题】:iOS Programmatic Zoom in UIScrollView Not Working 【发布时间】:2013-02-04 22:04:14 【问题描述】:

我是 ios 新手,在这方面我被困了一段时间。我的目标是当用户在视图中任意位置捏时以编程方式缩放到特定位置。这可能看起来很奇怪,但它是一个内部应用程序,不适用于 App Store。现在,当我捏缩放时,什么也没有发生。

在我的视图(它是一个单视图应用程序)上,我有一些我想以编程方式放大的图像。这就是我所做的。

    在 Interface Builder 中,我将一个 Scroll View 对象拖到我的 View 上,并更改了大小以适合 View

    在滚动视图中,我设置了最小缩放 = 0 和最大缩放 = 1000(只是为了确保这不是问题)

    我在 UIScrollView 顶部拖动了一个捏手势识别器。

    我右键单击 UIGestureRecognizer,并创建了一个名为 handlePinch() 的操作,我将代码放置在其中,以便在识别到捏合时以编程方式缩放。

    实现了handlePinch的放大(如下图)

    - (IBAction)handlePinch:(UIPinchGestureRecognizer *)sender 
        CGRect zoomRect;
    
        zoomRect.origin.x = 500;
        zoomRect.origin.y = 500;
        zoomRect.size.width = 512;
        zoomRect.size.height = 384;
    
        [scrollView zoomToRect:zoomRect animated:YES ];
      
    

已知: - 捏合手势被识别,handlePinch 被调用

感谢您提前提供任何答案或建议!

【问题讨论】:

滚动视图内容(即其顶层子视图)是否大于滚动视图框架? 实际上我的两个图像都比主视图大,也比 UIScrollView 大。我使图像小于 View 和 UIScrollView,但捏合手势仍然没有任何反应。我还尝试在主视图和 UIScrollView 中嵌入图像视图。 【参考方案1】:

您不需要捏合手势来执行此操作,因为缩放是内置的。以下是要做的事情。

在您的视图控制器头文件中,添加滚动视图委托:

@interface MyViewController : UIViewController <UIScrollViewDelegate>

接下来在实现文件中,最好是在您的 viewDidLoad 中,将滚动视图的委托设置为 self:

- (void)viewDidLoad 
    //other stuff
    self.scrollView.delegate = self;

然后,将此滚动视图委托方法复制并粘贴到您的实现文件中:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
    if (scrollView == self.scrollView) 
        return self.viewToBeZoomed;
    
    

self.viewToBeZoomed 是您要缩放的视图。此视图是 self.scrollView 的子视图。

【讨论】:

完美,是的,您需要滚动代理。我在这里更长的答案:***.com/a/6143833/8047

以上是关于ios - UIScrollView中的iOS编程缩放不起作用的主要内容,如果未能解决你的问题,请参考以下文章

iOS 使用 Autolayout 以编程方式修复 UIScrollView 中子视图的位置

iOS UIScrollView 以编程方式从下到上添加元素

为啥我不能在 iOS 7.0 中的 UIScrollView 中滚动?

UIWindow中的iOS UIScrollView

iOS 11、状态栏、导航栏和 UIScrollview

iOS UIScrollView的使用