需求 - 5 - 悬浮框 - 3

来源:互联网 发布:ubuntu gnome dock 编辑:程序博客网 时间:2024/05/18 00:44

前两介绍了两种实现,分别是:

1.通过添加手势,判断UIGestureRecognizerState的状态来实现

2.通过重新UIControl的触摸事件


这里介绍UIButton作为UIControl的子类的另外一种实现方法:


#import "LBSuspensionFrameFiveViewController.h"@interface LBSuspensionFrameFiveViewController ()@property (nonatomic, strong) UIButton *dragFloatView;@end@implementation LBSuspensionFrameFiveViewController- (void)viewDidLoad{        [super viewDidLoad];    [self.view setBackgroundColor:[UIColor whiteColor]];        self.dragFloatView = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 80, 80)];    [self.dragFloatView setImage:[UIImage imageNamed:@"onion.png"] forState:UIControlStateNormal];    [self.dragFloatView setShowsTouchWhenHighlighted:YES];      //去掉灰亮        [self.dragFloatView addTarget:self action:@selector(dragBegan:withEvent:) forControlEvents:UIControlEventTouchDown];    [self.dragFloatView addTarget:self action:@selector(dragMoving:withEvent:) forControlEvents:UIControlEventTouchDragInside];    [self.dragFloatView addTarget:self action:@selector(dragEnded:withEvent:) forControlEvents: UIControlEventTouchUpInside | UIControlEventTouchUpOutside];        [self.view addSubview:self.dragFloatView];}- (void) dragBegan: (UIControl *) c withEvent:ev{        NSLog(@"Button  moving bagin ......");    }- (void) dragMoving: (UIControl *) c withEvent:ev{        NSLog(@"Button  is moving ..............");        c.center = [[[ev allTouches] anyObject] locationInView:self.view];}- (void) dragEnded: (UIControl *) c withEvent:ev{        NSLog(@"Button  moving end..............");        // 如果需要随即停顿.//    c.center = [[[ev allTouches] anyObject] locationInView:self.view];        [self moveToEdge];}- (void)moveToEdge{        if (self.dragFloatView.center.x <= self.dragFloatView.superview.bounds.size.width * 0.5){                [UIView animateWithDuration:0.7 animations:^{                        self.dragFloatView.center = CGPointMake(self.dragFloatView.bounds.size.width * 0.5,                                                    self.dragFloatView.center.y);        }];    }    else{                [UIView animateWithDuration:0.7 animations:^{                        self.dragFloatView.center = CGPointMake(self.dragFloatView.superview.bounds.size.width - self.dragFloatView.bounds.size.width*0.5, self.dragFloatView.center.y);                    }];    }}@end



其实实现原理大同小异。

0 0