UIScrollView不缩放

时间:2012-07-21 19:53:01

标签: ios uiscrollview uiscrollviewdelegate

我遇到了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]]; 

}

此代码允许我滚动得很好但缩放不存在。

希望听到某人的意见, 戴夫

3 个答案:

答案 0 :(得分:2)

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


来自Apple's UIScrollView documentation

  

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

     

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

答案 1 :(得分:0)

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

  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 
    
    `

答案 2 :(得分:0)

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

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

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