我正在研究用于学习目的的“太阳能”应用程序。我注意到可以使用捏合手势来缩放瓷砖。它的缩放方式清楚地表明已经设定了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;
}
答案 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,并将它们与您的代码进行比较。也许某些东西会突然袭击你,导致你的问题。