[翻译] 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// 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