以某点为中心缩放视图

来源:互联网 发布:矩阵的秩代表什么 编辑:程序博客网 时间:2024/04/27 18:03

问题:
以手势捏合缩放视图,缩放的中心点为,手势的中心,或者某一点。

说明:
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;    }}

注意: 在缩放之后,移动之后,在恢复出事视图的时候,一定要注意锚点。。。。

0 1
原创粉丝点击