iOS点点滴滴

仿iPhone-AssistiveTouch

2017-11-08  本文已影响19人  NN_逝去
拖拽效果.gif

UIView的触摸事件主要有:文字来源
一根或者多根⼿手指开始触摸view,系统会⾃自动调⽤用view的下⾯面⽅方法.

代码事例(被抛弃的小功能)

// .h文件
#import <UIKit/UIKit.h>

@interface MXDragEnableView : UIImageView

@end

// .m文件
#import "MXDragEnableView.h"
#define PADDING     5

@interface MXDragEnableView () {
    CGPoint beginPoint;
}

@end
@implementation MXDragEnableView

- (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        self.userInteractionEnabled = YES;
    }
    return self;
}

- (instancetype)init
{
    if (self = [super init]) {
        self.userInteractionEnabled = YES;
    }
    return self;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    beginPoint = [touch locationInView:self];
    [[self superview] bringSubviewToFront:self];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint nowPoint = [touch locationInView:self];
    float offsetX = nowPoint.x - beginPoint.x;
    float offsetY = nowPoint.y - beginPoint.y;
    self.center = CGPointMake(self.center.x + offsetX, self.center.y + offsetY);
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self setNewDraggedViewFrame];
}

- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self setNewDraggedViewFrame];
}

- (void)setNewDraggedViewFrame
{
    float marginLeft = self.frame.origin.x;
    float marginRight = self.superview.frame.size.width - self.frame.origin.x - self.frame.size.width;
    float marginTop = self.frame.origin.y;
    float marginBottom = self.superview.frame.size.height - self.frame.origin.y - self.frame.size.height;
    
    //    marginLeft<marginRight?PADDING:
    if (marginTop<98) {
        self.frame = CGRectMake(marginLeft<marginRight?PADDING:self.superview.frame.size.width - self.frame.size.width-PADDING,
                                PADDING,
                                self.frame.size.width,
                                self.frame.size.height);
    }
    else if (marginBottom<83) {
        self.frame = CGRectMake(marginLeft<marginRight?PADDING:self.superview.frame.size.width - self.frame.size.width-PADDING,
                                self.superview.frame.size.height - self.frame.size.height-PADDING,
                                self.frame.size.width,
                                self.frame.size.height);
        
    }
    else {
        self.frame = CGRectMake(marginLeft<marginRight?PADDING:self.superview.frame.size.width - self.frame.size.width-PADDING,
                                self.frame.origin.y,
                                self.frame.size.width,
                                self.frame.size.height);
    }

}

@end 
上一篇 下一篇

猜你喜欢

热点阅读