如何设置GMGridView的捏合缩放视图的锚点

5
我正在研究学习目的的“Solar”应用程序,注意到可以使用捏合手势缩放标题。 显然,这种缩放方式表明已设置了uiview的锚点。

您可以在此处查看其视频http://www.youtube.com/watch?v=FfgWkAuLvng

为了实现相同的效果,我下载了GMGridView代码。 我试图设置锚点,以获得与Solar应用程序中相同的输出。

我面临的问题是,在第一次捏合缩放时,我无法将其缩放到锚点,但是之后可以。 我找不到原因,为什么第一次不从锚点缩放。 请帮忙。

我修改了以下方法:

- (void)pinchGestureUpdated:(UIPinchGestureRecognizer *)pinchGesture

我修改了手势识别器的起始状态为

 case UIGestureRecognizerStateBegan:
        {
            [self transformingGestureDidBeginWithGesture:pinchGesture];
            _transformingItem.contentView.layer.anchorPoint = CGPointMake(0,0.5);
            break;
        }

我假设你有一个用于存储当前锚点的类变量。你是否为这个变量设置了初始值?如果是,你是在viewDidLoad还是viewDidAppear中设置它? - user207616
3个回答

3
这是因为一旦更改图层的锚点,您也将更改图层视图的中心点。假设视图框架是0,0,100,100,则默认情况下视图中心位于50,50,因为锚点设置为0.5,0.5。 当您现在将锚点更改为0,0.5时,视图的中心现在位于0,50,导致在下次绘制时跳动。为了避免这种情况,在更改锚点后,您必须更新视图的中心。我已经在您描述的GMGridView中进行了测试。
case UIGestureRecognizerStateBegan:
    {
        [self transformingGestureDidBeginWithGesture:pinchGesture];

        _transformingItem.contentView.layer.anchorPoint = CGPointMake(0,0.5);

        CGPoint orgCenter = _transformingItem.contentView.center;
        orgCenter.x -= _transformingItem.contentView.frame.size.width / 2.f;

        [_transformingItem.contentView setCenter:orgCenter];  
    }
    break;

我希望这个回答解决了你的问题。

2
请测试以下代码,取自这里。如需更多了解锚点,请参考此处
CGRect oldFrame = _transformingItem.contentView.frame;
_transformingItem.contentView.layer.anchorPoint = CGPointMake(0, 0);
_transformingItem.contentView.frame = oldFrame;

希望这能帮到你,如果需要更多帮助,请告诉我。

0

没有看到更多的代码,我不确定你的代码中是否有任何问题,但是关于这个问题有两个很好的先前的问答。

第一个问答仅涉及设置锚点。我自己尝试过,效果很好。

第二个问答更详细地介绍了锚点及其与视图定位的关系。这里的示例也涉及设置锚点。

Github上还有一个使用锚点的示例项目在这里

我建议您查看这两个问答、示例项目,并将它们与您的代码进行比较。也许会有什么问题跳出来引起您的注意。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接