美文网首页
IOS多图形的平移手势移动

IOS多图形的平移手势移动

作者: 怀心逝水 | 来源:发表于2017-12-06 17:11 被阅读237次
    329B78FF-839A-43DE-A54A-73F51C3841C9.png

    还是老规矩,先上效果图。


    font .gif

    当然这是我在公司做的的手机壳设计的DIY,其中就多个图层的手势移动做个简单的说明吧!

    首先说一个图层的移动,比如一个SomeOneView,当然这个对象中还包含图片和边框。
    我们创建好了对象之后,在创建一个全局的UIPanGestureRecognizer对象,初始化之后,

    self.panGes = [[UIPanGestureRecognizer alloc] initWithTarget:self
                                                              action:@selector(viewMoveWithPan:)];
    self.panGes.delegate = self;
    [self addGestureRecognizer:self.panGes];
    

    这里的代理是为了解决多个手势的时候的冲突。(指的是一个图层上的多个手势)

    这样我们就给我们的视图层加了移动手势了,接下来就是指明在哪个图层上移动的,这样我们需要确定它移动的父类图层,我这里的当然是手机壳背面的区域。
    例如你的父视图是superView1,那么:

    关于移动有两种方式:
    1.根据transform的方式来。

    CGPoint point = [panGes translationInView:superView1];
    panGes.view.transform = CGAffineTransformTranslate(panGes.view.transform, point.x, point.y);
     [panGes setTranslation:CGPointZero panGes.view];
    

    2.根据CGPoint,用视图的中心点去移动。

    @property (assign, nonatomic) CGPoint touchStart;
    
    - (void)solidViewDidPan:(UIPanGestureRecognizer *)panGes {
        
        if (panGes.state == UIGestureRecognizerStateBegan) {
            
            self.touchStart = [panGes locationInView:self.superview];
            
        }else if (panGes.state == UIGestureRecognizerStateChanged) {
            
            CGPoint touch = [panGes locationInView:self.superview];
            CGPoint newCenter = CGPointMake(self.center.x + touch.x - self.touchStart.x,
                                            self.center.y + touch.y - self.touchStart.y);
            self.center = newCenter;
            self.touchStart = touch;
            
        }else if (panGes.state == UIGestureRecognizerStateEnded) {
    
        }
        
    }
    

    当然每一种都有各自的好处,第一种方式比较简洁,但不利于去确定视图的移动范围,比如想要在移动到中间的时候,出现校准线。这样用第二种方式就会比较容易,通过用移动图层的中心点是否在中间的某一个区域中的时候,就会出现瞄准线,同时显时的设置移动图层的中心点即可。

    例如代码:

    static CGFloat const YOFFSET = 8;
    static CGFloat const XOFFSET = 8;
    
    if ((newCenter.x > panView.width/2.0 - XOFFSET &&
                 newCenter.x < panView.width/2.0 + XOFFSET) &&
                (newCenter.y > panView.height/2.0 - YOFFSET &&
                 newCenter.y < panView.height/2.0 + YOFFSET)) {
                    
                    newCenter.x = panView.width/2.0;
                    newCenter.y = panView.height/2.0;
                    view.center = newCenter;
                    [[FMGlobal getFreeDesignVC] showHLineViewWithFlag:YES];
                    [[FMGlobal getFreeDesignVC] showVLineViewWithFlag:YES];
                    return;
                }
    

    当然这只是部分的代码,重要的是说这个实现起来的思路而已。

    相关文章

      网友评论

          本文标题:IOS多图形的平移手势移动

          本文链接:https://www.haomeiwen.com/subject/eayutxtx.html