zl程序教程

您现在的位置是:首页 >  其它

当前栏目

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

翻译 拖拽 uiview
2023-09-14 08:57:58 时间

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 controllers 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