【问题标题】:UIScrollView is not zoomingUIScrollView 没有缩放
【发布时间】:2012-07-20 16:16:34
【问题描述】:

我遇到了 UIScrollView 的缩放功能问题。它根本不起作用。我读过类似的帖子,其他人使用的修复似乎都不适合我。我的 viewController 引用了 UIScrollViewDelegate,我有一个 UIScrollView 的实例变量,我将我的子视图声明为 UIScrollView 的委托对象,并且我有 (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 的实现。这是我的 loadView 函数:

(void)loadView 
{
    CGRect frame = CGRectMake(0, 0, 320, 480);

    scrollView = [[UIScrollView alloc] initWithFrame:frame];
    [scrollView setScrollEnabled:YES];

    CGRect reallyBigRect;
    reallyBigRect.origin = CGPointZero;
    reallyBigRect.size.width = frame.size.width * 2.0;
    reallyBigRect.size.height = frame.size.height * 2.0;
    [scrollView setContentSize:reallyBigRect.size];

    CGPoint offset;
    offset.x = frame.size.width * 0.5;
    offset.y = frame.size.height * 0.5;
    [scrollView setContentOffset:offset];


    [scrollView setMinimumZoomScale:1];
    [scrollView setMaximumZoomScale:5];
    [scrollView setUserInteractionEnabled:YES];
    self.scrollView.delegate = self;


    self.view = scrollView;

    views = [[HypnosisView alloc] initWithFrame:reallyBigRect];

    [scrollView addSubview:views];

    [self.view setBackgroundColor:[UIColor clearColor]]; 

}

这段代码让我可以很好地滚动,但不存在缩放。

希望收到某人的来信, 戴夫

【问题讨论】:

  • 有什么理由不向 self.view 添加滚动视图?
  • 仅供参考,请勿在您的帖子上签名:stackoverflow.com/faq#signatures
  • 哦,谢谢!我不知道我的帖子是自动签名的。那么我第一次尝试通过(addsubview)向self.view添加滚动视图会导致应用程序崩溃。使用 self.view = scrollview 它工作得很好。我假设这是因为在代码中的那个位置没有视图可以添加滚动视图。

标签: ios uiscrollview uiscrollviewdelegate


【解决方案1】:

您是否尝试过实现scrollViewDidEndZooming:withView:atScale:


来自Apple's UIScrollView documentation

滚动视图还可以处理内容的缩放和平移。当用户做出捏合或张开手势时,滚动视图会调整内容的偏移量和比例。当手势结束时,管理内容视图的对象应该根据需要更新内容的子视图。 (请注意,手势可以结束并且手指仍然可以向下。)在手势进行时,滚动视图不会向子视图发送任何跟踪调用。

UIScrollView 类可以有一个必须采用UIScrollViewDelegate 协议的委托。 要进行缩放和平移,委托必须实现 viewForZoomingInScrollView:scrollViewDidEndZooming:withView:atScale:;此外,最大(maximumZoomScale)和最小(minimumZoomScale)缩放比例必须不同。

【讨论】:

  • 我已经实现了它们,佩德罗。我将委托对象的最小和最大缩放比例分别设置为 1.0 和 4.0。
  • 我在这里恢复了一个长期完成的话题,但是佩德罗你能指定如何实现 scrollViewDidEndZooming:withView:atScale: 吗?例如。说滚动视图中只有一个 UIImageView,你如何缩放它?
  • 好久没做iOS了,具体记不太清了。但是,通过 iTunes 免费提供一些不错的视频讲座。它们由斯坦福大学以“Developing Apps for iOS”的名义提供。我记得教授在某个时候详细介绍了这一点。抱歉,我现在无法提供更多帮助!
【解决方案2】:

要启用缩放需要做两件事:

  1. 使用UIScrollViewDelegate 协议并实现viewForZoomingInScrollView:UIScrollView -> UIView?。将滚动条委托设置为实现类。这期望 UIView 的返回被缩放。所以一个简单的例子是:

    
    @IBOutlet var myZoomableImageView: UIImageView?`
    
    override func viewDidLoad() {
        myScrollView?.delegate = self
    } 
    
    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return myZoomableImageView
    }
    
  2. 使用UIScrollView.minimumZoomScaleUIScrollView.maximumZoomScale 为滚动视图设置最大和最小缩放,如下所示:

    
    myScrollView?.minimumZoomScale = 1.0
    myScrollView?.maximumZoomScale = 3.0 
    
    `

【讨论】:

    【解决方案3】:

    此帖highlights the three things that are necessary to enable zooming

    1. 您需要一个实现 UIScrollViewDelegate 并在您的 UIScrollView 实例上设置为 delegate 的委托
    2. 在您的委托上,您必须实现一种方法:viewForZoomingInScrollView:必须返回内容视图 您对缩放感兴趣)。你也可以实现 scrollViewDidEndZooming:withView:atScale: 可选。
    3. 在您的UIScrollView 实例上,您必须将minimumZoomScalemaximumZoomScale 设置为不同(它们 默认为 1.0)。

    从您的示例代码中,我们可以看到 #1 和 #3 已实现。因此,#2 很可能是问题所在。仔细检查实现viewForZoomingInScrollView 方法的代码,或者最好将其包含在上面的代码中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      相关资源
      最近更新 更多