• [翻译] UIView-draggable 可拖拽的UIView


    UIView-draggable 可拖拽的UIView

    https://github.com/andreamazz/UIView-draggable

    UIView category that adds dragging capabilities

    一个类目用来给UIView便利的添加拖拽手势

    Setup with Cocoapods 用Cocoapods设置

    • Add pod 'UIView+draggable' to your Podfile
    • Run pod install
    • Run open App.xcworkspace
    • Import UIVIew+draggable.h in your controller's header file

    Usage 使用

    // Enable dragging
    [self.view enableDragging];
    

    TODO

    • Write the README :)

    UIView+draggable.h

    //
    //  UIView+draggable.h
    //  UIView+draggable
    //
    //  Created by Andrea on 13/03/14.
    //  Copyright (c) 2014 Fancy Pixel. All rights reserved.
    //
    
    @interface UIView (draggable)
    
    /**-----------------------------------------------------------------------------
     * @name UIView+draggable Properties
     * -----------------------------------------------------------------------------
     */
    
    /** The pan gestures that handles the view dragging
     *
     * @param panGesture The tint color of the blurred view. Set to nil to reset.
     */
    @property (nonatomic) UIPanGestureRecognizer *panGesture;
    
    /**-----------------------------------------------------------------------------
     * @name UIView+draggable Methods
     * -----------------------------------------------------------------------------
     */
    
    /** Enables the dragging
     *
     * Enables the dragging state of the view
     */
    - (void)enableDragging;
    
    /** Disable or enable the view dragging
     *
     * @param draggable The boolean that enables or disables the draggable state
     */
    - (void)setDraggable:(BOOL)draggable;
    
    @end

    UIView+draggable.m

    //
    //  UIView+draggable.m
    //  UIView+draggable
    //
    //  Created by Andrea on 13/03/14.
    //  Copyright (c) 2014 Fancy Pixel. All rights reserved.
    //
    
    #import "UIView+draggable.h"
    #import <objc/runtime.h>
    
    @implementation UIView (draggable)
    
    - (void)setPanGesture:(UIPanGestureRecognizer*)panGesture
    {
        objc_setAssociatedObject(self, @selector(panGesture), panGesture, OBJC_ASSOCIATION_RETAIN);
    }
    
    - (UIPanGestureRecognizer*)panGesture
    {
        return objc_getAssociatedObject(self, @selector(panGesture));
    }
    
    - (void)handlePan:(UIPanGestureRecognizer*)sender
    {
        [self adjustAnchorPointForGestureRecognizer:sender];
    
        CGPoint translation = [sender translationInView:[self superview]];
        [self setCenter:CGPointMake([self center].x + translation.x, [self center].y + translation.y)];
    
        [sender setTranslation:(CGPoint){0, 0} inView:[self superview]];
    }
    
    - (void)adjustAnchorPointForGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
    {
        if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
            UIView *piece = self;
            CGPoint locationInView = [gestureRecognizer locationInView:piece];
            CGPoint locationInSuperview = [gestureRecognizer locationInView:piece.superview];
            
            piece.layer.anchorPoint = CGPointMake(locationInView.x / piece.bounds.size.width, locationInView.y / piece.bounds.size.height);
            piece.center = locationInSuperview;
        }
    }
    
    - (void)setDraggable:(BOOL)draggable
    {
        [self.panGesture setEnabled:draggable];
    }
    
    - (void)enableDragging
    {
        self.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
        [self.panGesture setMaximumNumberOfTouches:1];
        [self.panGesture setMinimumNumberOfTouches:1];
        [self.panGesture setCancelsTouchesInView:NO];
        [self addGestureRecognizer:self.panGesture];
    }
    
    @end
  • 相关阅读:
    使用过的一些前端工具
    文档和元素中与几何形状和滚动相关的属性和方法
    文档元素选取和遍历中的一些容易忘记的概念
    只存在于理想中的客户端JavaScript时间线
    JavaScript函数代码和执行上下文--ECMA-262-5
    JavaScript中的闭包
    Git Note
    HDOJ 4463 Outlets 最短路
    HDOJ 4548 美素数
    HDOJ 2544 最短路
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3674656.html
Copyright © 2020-2023  润新知