1

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]]; 

}

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

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

4

3 回答 3

2

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


来自Apple 的 UIScrollView 文档

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

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

于 2012-07-22T01:16:01.293 回答
1

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

  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.minimumZoomScale使用和UIScrollView.maximumZoomScale像这样将最大和最小缩放设置为滚动视图:

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

于 2016-02-04T08:13:19.830 回答
0

这篇文章重点介绍了启用缩放所需的三件事

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

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

于 2020-02-15T01:12:31.900 回答