如何设置捏缩放的定位点(GMGridView)

时间:2013-06-17 09:23:31

标签: iphone ios uigesturerecognizer uipinchgesturerecognizer gmgridview

我正在研究用于学习目的的“太阳能”应用程序。我注意到可以使用捏合手势来缩放瓷砖。它的缩放方式清楚地表明已经设定了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;
        }

3 个答案:

答案 0 :(得分:3)

这是因为一旦更改了图层的锚点,您还将更改图层视图的中心点。假设视图的框架为 0,0,100,100 ,则默认情况下视图的中心位于 50,50 ,因为anchorpoint设置为 0.5,0.5 。当您现在将锚点更改为 0,0.5 时,视图的中心现在位于 0,50 ,导致它在下次绘制时跳转。为避免这种情况,您必须在更改anchorpoint后更新视图的中心。我在您描述的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;

我希望这能回答你的问题。

答案 1 :(得分:2)

请测试以下从here获取的代码。要了解更多关于anchorpoint的信息,请查看this as well

CGRect oldFrame = _transformingItem.contentView.frame;
_transformingItem.contentView.layer.anchorPoint = CGPointMake(0, 0);
_transformingItem.contentView.frame = oldFrame;

希望这有帮助,如果您需要更多帮助,请告诉我。

答案 2 :(得分:0)

不确定您的代码中是否有任何gremlins而没有看到更多内容,但有关此问题的前两个Q& As。

first Q&A处理简单设置锚点。我自己试过这个并且工作正常。

second Q&A详细介绍了锚点及其与视图位置的关系。这里的例子也涉及设置锚点。

还有一个使用Github here上的锚点的示例项目。

我建议您查看示例项目项目中的两个Q& As,并将它们与您的代码进行比较。也许某些东西会突然袭击你,导致你的问题。