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
// Enable dragging
[self.view enableDragging];
- 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