登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

查看: 821|回复: 6

[代码分享] 仿QQ语音通话可以拖拽和点击的button

[复制链接]

1

主题

2

帖子

242

金钱

攻城狮

Rank: 3Rank: 3

发表于 2016-5-18 16:58:11 | 显示全部楼层 |阅读模式
功能:仿QQ语音通话可以拖拽和点击的button。

主要实现方法:
[Objective-C] 查看源文件 复制代码
#import "LPFButton.h"

@implementation LPFButton

- (void)addTargetActionEvents{
    isBtnDrag = NO;
    [self addTarget:self action:@selector(dragMoving:withEvent: )forControlEvents: UIControlEventTouchDragInside];
    [self addTarget:self action:@selector(dragEnd:withEvent:) forControlEvents:UIControlEventTouchUpInside];
}

- (void) dragMoving: (UIButton *)btn withEvent:event
{
    isBtnDrag = YES;
    CGPoint point = [[[event allTouches] anyObject] locationInView:self.superview];
    CGFloat x = point.x;
    CGFloat y = point.y;
    
    CGFloat btnx = btn.frame.size.width/2;
    CGFloat btny = btn.frame.size.height/2;
    
    if(x<=btnx)
    {
        point.x = btnx+self.edgeMargin;
    }
    
    if(x >= self.superview.bounds.size.width - btnx)
    {
        point.x = self.superview.bounds.size.width - btnx - self.edgeMargin;
    }
    
    if (y<=btny) {
        point.y = btny+self.edgeMargin;
    }
    
    if (y >= self.superview.bounds.size.height - btny) {
        point.y = self.superview.bounds.size.height - btny - self.edgeMargin;
    }
    
    
    NSLog(@"fs:%f %f",x, btnx);
    
    
    [UIView animateWithDuration:0.3 delay:0 options:0 animations:^{
        btn.center = point;
    } completion:nil];
}

- (void) dragEnd: (UIButton *)btn withEvent:event
{
    CGPoint point = [[[event allTouches] anyObject] locationInView:self.superview];
    CGFloat x = point.x;
    CGFloat y = point.y;
    
    CGFloat btnx = btn.frame.size.width/2;
    CGFloat btny = btn.frame.size.height/2;
    
    if (x < self.superview.bounds.size.width/2) {
        point.x = btnx+self.edgeMargin;
    }
    
    if (x > self.superview.bounds.size.width/2) {
        point.x = self.superview.bounds.size.width - btnx - self.edgeMargin;
    }
    
    if (y<=btny) {
        point.y = btny+self.edgeMargin;
    }
    
    if (y >= self.superview.bounds.size.height - btny) {
        point.y = self.superview.bounds.size.height - btny - self.edgeMargin;
    }
    
    
    [UIView animateWithDuration:0.3 delay:0 options:0 animations:^{
        btn.center = point;
    } completion:nil];
    
    if (isBtnDrag == YES) {
        NSLog(@"-----:%f %f",x, btnx);
        isBtnDrag = NO;
    }else{
        NSLog(@"点击了啊");
        if (_delegate && [_delegate respondsToSelector:@selector(lpfButtonClickAction:)]) {
            [_delegate lpfButtonClickAction:btn];
        }
        
    }
}

@end


DEMO在1楼可以下载
Untitled.gif

1

主题

2

帖子

242

金钱

攻城狮

Rank: 3Rank: 3

 楼主| 发表于 2016-5-18 17:05:49 | 显示全部楼层
仿QQ语音通话功能自定义可以点击拖拽的btn。

自定义拖拽QQbtn.zip

63.21 KB, 下载次数: 31

售价: 10 金钱  [记录]

19

主题

697

帖子

1万

金钱

码皇

Rank: 8Rank: 8

分享大神活跃会员

发表于 2016-5-18 19:00:07 | 显示全部楼层
强烈支持楼主ing……

0

主题

28

帖子

196

金钱

攻城狮

Rank: 3Rank: 3

发表于 2016-5-18 21:28:48 | 显示全部楼层
强烈支持楼主ing……

5

主题

1646

帖子

8470

金钱

码皇

Rank: 8Rank: 8

活跃会员颜值认证

发表于 2016-5-19 10:36:37 | 显示全部楼层
正需要啊,感谢楼主无私分享!

0

主题

9

帖子

221

金钱

攻城狮

Rank: 3Rank: 3

发表于 2016-5-25 17:52:36 | 显示全部楼层
楼主感谢分享,但是发现了一个问题,你点击这个按钮稍微有一点偏移量就不会执行button的点击方法

0

主题

1

帖子

9

金钱

初级码农

Rank: 1

发表于 2016-6-7 20:53:51 | 显示全部楼层
加在scrollview上的话,效果不好,望楼主优化
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

每日头条

通过邮件订阅最新 Code4App 信息
上一条 /4 下一条

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表