问题:
以手势捏合缩放视图,缩放的中心点为,手势的中心,或者某一点。
说明:
IOS中各个View的层次关系,。特别是,要清除的知道,当前view的frame与superView的bounds是一个坐标系。
具体来讲,AnchorPoint 是iOS CoreAnimation层的事物。图层的anchorPoint属性是一个CGPoint值,它指定了一个基于图层bounds的符合位置坐标系的位置。Anchor point指定了bounds相对于position的值,更重要的是,它是变换的支点。AnchorPoint值的范围是0 – 1 ,可以理解为AnchorPoint表示了支点位置的坐标占bounds的比例。
iOS CoreAnimation 坐标系原点位于左上角,因此,我们可以很容易的知道,如果想要一个图层的支点位于图层左上角,那么它的AnchorPoint应该是(0, 0)。相应的如果想要支点位于左下角,AnchorPoint应该是 (0, 1)。而默认的中心点的AnchorPoint是(0.5, 0.5)。
方法:
根据手势的中心,更新锚点:
- (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{
//UIGestureRecognizerStateBegan意味着手势已经被识别
if (gestureRecognizer.state ==UIGestureRecognizerStateBegan)
{
//手势发生在哪个view上
UIView *piece = gestureRecognizer.view;
//获得当前手势在view上的位置。
CGPoint locationInView = [gestureRecognizer locationInView:piece];
piece.layer.anchorPoint =CGPointMake(locationInView.x / piece.bounds.size.width, locationInView.y / piece.bounds.size.height);
//根据在view上的位置设置锚点。
//防止设置完锚点过后,view的位置发生变化,相当于把view的位置重新定位到原来的位置上。
CGPoint locationInSuperview = [gestureRecognizer locationInView:piece.superview];
piece.center = locationInSuperview;
}
}
注意: 在缩放之后,移动之后,在恢复出事视图的时候,一定要注意锚点。。。。