5

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

3 回答 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;

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

于 2013-06-22T13:48:45.767 回答
2

请测试取自此处的以下代码。要了解更多关于锚点的信息,请同时检查

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

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

于 2013-06-27T06:28:24.183 回答
0

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

一个问答只是简单地设置一个锚点。我自己试过了,效果很好。

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

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

我建议您看一下示例项目项目的两个问答,并将它们与您的代码进行比较。也许有什么东西会突然出现在你身上,这会导致你的问题。

于 2013-06-22T15:15:55.160 回答