惊!一分钟、超简单实现可拖动的按钮

做拖动的按钮很简单,关键就是设置正确的手势,改变按钮的位置。
上代码:
1.按钮初始化

-(UIButton *)kfBtn{
    static const NSInteger kfBtnW = 50;
    if (!_kfBtn) {
        _kfBtn = [[UIButton alloc]initWithFrame:CGRectMake(SCREEN_WIDTH - kfBtnW, 300, kfBtnW, kfBtnW)];
        [_kfBtn setImage:[UIImage imageNamed:@"灰"] forState:UIControlStateNormal];
        [_kfBtn addTarget:self action:@selector(click_btn) forControlEvents:UIControlEventTouchDown];
        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(move_btn:)];
        pan.minimumNumberOfTouches = 1;
        pan.maximumNumberOfTouches = 1;
        [_kfBtn addGestureRecognizer:pan];
    }
    return _kfBtn;
}

2.拖动代码

-(void)move_btn:(UIPanGestureRecognizer *)sender{

    if (sender.state != UIGestureRecognizerStateEnded && sender.state != UIGestureRecognizerStateFailed){
        CGPoint location = [sender locationInView:sender.view.superview];
        CGFloat x = location.x;
        CGFloat y = location.y;
        self.kfBtn.center = CGPointMake(x, y);
    }

}

3.加上边界判断

-(void)move_btn:(UIPanGestureRecognizer *)sender{
    if (sender.state != UIGestureRecognizerStateEnded && sender.state != UIGestureRecognizerStateFailed){
        //获取点击的坐标
        CGPoint location = [sender locationInView:sender.view.superview];
        CGFloat x = location.x;
        CGFloat y = location.y;
        CGFloat btnW = self.kfBtn.frame.size.width;
        CGFloat btnH = self.kfBtn.frame.size.height;

        //判断边界
        if (x - btnW/2.0f <= 0) x = btnW/2.0f;
        if (SCREEN_WIDTH - x <= btnW/2.0f) x = SCREEN_WIDTH - btnW/2.0f;
        if (y - btnH/2.0f <= 0) y = btnH/2.0f;
        if (SCREENH_HEIGHT - y <= btnH/2.0f) y = SCREENH_HEIGHT - btnH/2.0f;

        //赋值
        self.kfBtn.center = CGPointMake(x, y);
    }
}

4.调用

[self.view addSubView:self.kfBtn];

ok~一分钟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要在 Unity 中创建一个 UI 按钮和一个滑动条。在 Unity 的菜单栏中,选择 GameObject -> UI -> Button,创建一个按钮。接着,选择 GameObject -> UI -> Slider,创建一个滑动条。 然后,你需要编写一个脚本来处理倒计时和滑动条的逻辑。下面是一个简单的脚本示例: ```csharp using UnityEngine; using UnityEngine.UI; public class TimerButton : MonoBehaviour { public Slider slider; public Button button; private float totalTime = 1800; // 30 minutes in seconds private float timeLeft; private void Start() { timeLeft = totalTime; button.onClick.AddListener(StartTimer); } private void Update() { if (timeLeft > 0) { timeLeft -= Time.deltaTime; slider.value = timeLeft / totalTime; } else { // Time's up! // Do something here, like disable the button or play a sound effect } } private void StartTimer() { timeLeft = totalTime; } } ``` 这个脚本中,我们定义了一个 Slider 和一个 Button 的公共变量,分别用来引用我们在 Unity 中创建的滑动条和按钮。在 Start() 方法中,我们初始化了倒计时的时间,并且给按钮添加了一个点击事件监听器,当点击按钮时,我们会重置倒计时的时间。在 Update() 方法中,我们每帧都会更新倒计时的时间,并且根据剩余时间更新滑动条的进度。当倒计时结束后,我们可以在这里添加一些逻辑,比如禁用按钮或者播放音效。 最后,将这个脚本挂载到你创建的按钮对象上,然后将滑动条拖拽到脚本中相应的变量上,就可以实现点击按钮进行 30 分钟倒计时的滑动条了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值