iOS滑动解锁/滑动获取验证码效果实现

最近短信服务商要求公司的app在获取短信验证码时加上校验码,目前比较流行的是采用类似滑动解锁的方式,我们公司采取的就是这种方式,设计图如下所示:

这里校验内部的处理逻辑不作介绍,主要分享一下界面效果的实现, 下面贴出代码:

先子类化UISlider

#import <UIKit/UIKit.h>

#define SliderWidth 240
#define SliderHeight 40
#define SliderLabelTextColor [UIColor colorWithRed:193/255.0 green:193/255.0 blue:193/255.0 alpha:1]
#define SliderLabelBorderColor [UIColor colorWithRed:193/255.0 green:193/255.0 blue:193/255.0 alpha:1].CGColor
#define SliderMinimumTrackTintColor [UIColor redColor]
#define SliderLabelFont 14
#define SliderLabelText @"滑动解锁/获取验证码"
#define ThumbImageWidth 40
#define ThumbImageHeight 40

@interface CheckCodeSlider : UISlider

@end

//*******************************************************

#import "CheckCodeSlider.h"

@implementation CheckCodeSlider

//覆写父类UISlider的方法改变滑条frame
- (CGRect)trackRectForBounds:(CGRect)bounds{

    return CGRectMake(0, 0, SliderWidth, SliderHeight);
}

@end

再实例化CheckCodeSlider,这里随便在一个ViewController里写的

#import "ViewController.h"
#import "CheckCodeSlider.h"

@interface ViewController (){

    UIImageView *imgView;
}
@property (nonatomic ,strong)CheckCodeSlider *slider;
@property (nonatomic ,strong)UILabel *label;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    [self createSlider];
}

- (void)createSlider{
    _slider = [[CheckCodeSlider alloc]initWithFrame:CGRectMake(0, 0, SliderWidth, SliderHeight)];
    _slider.center = self.view.center;
    _slider.minimumTrackTintColor = [UIColor clearColor];
    _slider.maximumTrackTintColor = [UIColor clearColor];
    _slider.layer.masksToBounds = YES;
    _slider.layer.cornerRadius = SliderHeight/2;
    [_slider setThumbImage:[UIImage imageNamed:@"滑块按钮"] forState:UIControlStateNormal];
    [_slider addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:_slider];

    _label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, SliderWidth, SliderHeight)];
    _label.center = self.view.center;
    _label.text = SliderLabelText;
    _label.font = [UIFont systemFontOfSize:SliderLabelFont];
    _label.textAlignment = NSTextAlignmentCenter;
    _label.textColor = SliderLabelTextColor;
    _label.layer.masksToBounds = YES;
    _label.layer.cornerRadius = SliderHeight/2;
    _label.layer.borderWidth = 1;
    _label.layer.borderColor = SliderLabelBorderColor;
    [self.view addSubview:_label];

    //这里创建了一个跟滑块相同的imageview覆盖在文字上面,并在sliderValueChanged方法中让其跟着滑块滑动。

    imgView = [[UIImageView alloc]initWithFrame:CGRectMake(_slider.frame.origin.x-2, _slider.frame.origin.y-2, ThumbImageWidth+4, ThumbImageHeight+4)];
    imgView.image = [UIImage imageNamed:@"滑块按钮"];
    [self.view addSubview:imgView];
}

- (void)sliderValueChanged:(UISlider *)slider{
    [_slider setValue:slider.value animated:NO];
    if (slider.value >0) {
        _slider.minimumTrackTintColor = SliderMinimumTrackTintColor;
    }else{
        _slider.minimumTrackTintColor = [UIColor clearColor];
    }

    imgView.center = CGPointMake(_slider.frame.origin.x+slider.value*(SliderWidth-ThumbImageWidth)+ThumbImageWidth/2, _slider.frame.origin.y+ThumbImageHeight/2);

    if (!slider.isTracking && slider.value != 1) {
        [_slider setValue:0 animated:YES];
        if (slider.value >0) {
            _slider.minimumTrackTintColor = SliderMinimumTrackTintColor;
        }else{
            _slider.minimumTrackTintColor = [UIColor clearColor];
        }
        imgView.frame = CGRectMake(_slider.frame.origin.x-2, _slider.frame.origin.y-2, ThumbImageWidth+4, ThumbImageHeight+4);
    }
}

这样就可以实现上图中的效果,只需要在sliderValueChanged根据slider的value值做相应处理就行了。

时间: 2024-10-11 01:44:57

iOS滑动解锁/滑动获取验证码效果实现的相关文章

获取验证码效果和后台代码

客户端js+html代码 <script type="text/javascript"> var tcode = 0;//定时器返回代码 //获得验证码 function GetVerifyCodeAction() { var email = $("#email").val(); if (!checkEmail(email)) { $("#area_error").addClass("log-tips").show

Android实现获取验证码效果

功能非常简单就是定义一个CountDownTimer直接看代码 首先在XML里面放个按钮代码如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout

点击获取验证码效果

1 var Btn = document.getElementById('btn'); 2 var star = 10; 3 4 Btn.onclick = function(){ 5 var timer = setInterval(function(){ 6 star--; 7 Btn.disabled = true; 8 Btn.innerHTML = "重新发送验证码" + "(" + star + ")"; 9 console.log(s

ios开发获取验证码按钮读秒效果

方法一: - (void)startCountDown { _seconds = 60; NSString *str = [NSString stringWithFormat:@"%d秒后可重新获取", _seconds]; [_btnVerify setTitle:str forState:UIControlStateDisabled]; [_btnVerify.titleLabel setFont:[UIFont systemFontOfSize:12]]; [_btnVerify

手机滑动解锁代码

#region==滑动解锁部分== private bool mousedown;//定义鼠标点击的bool值 private int curx;//定义鼠标点击时的位置X坐标 private void button11_MouseDown(object sender, MouseEventArgs e) { mousedown = true; curx = Cursor.Position.X;//获取点击时的X坐标 } private void button11_MouseUp(object

Swift: 打造滑动解锁文字动画

最近木事,找出来玩了玩facebook的paper.到处都是那个"slide to unlock your phone"的效果啊.忽闪忽闪的小有点炫酷的感觉.于是准备研究一下.木有想到的是居然可以用CAGradientLayer和一个小小的动画就可以实现这个效果."滑动解锁"的效果: 当然啦,首先你需要显示出这个"滑动解锁"的文本.这里咱们就用一个简单的UILabel来解决这个问题. var textExampleLabel: UILabel!

Selenium模拟JQuery滑动解锁

滑动解锁一直做UI自动化的难点之一,我补一篇滑动解锁的例子,希望能给初做Web UI自动化测试的同学一些思路. 首先先看个例子. https://www.helloweba.com/demo/2017/unlock/ 当我手动点击滑块时,改变的只是样式: 1.slide-to-unlock-handle 表示滑块,滑块的左边距在变大(因为它在向右移动嘛!) 2.Slide-tounlock-progress 表示滑过之后的背景黄色,黄色的宽度在增加,因为滑动经过的地方都变黄了. 除些之外,没其它

Android通过指令模拟touch滑动解锁

 手机上有很多输入设备,电源键.音量加减键.触屏等等.这些设备的编号会因每个手机不同而不同,因此我们需要首先了解这个手机上都有哪些输入设备,然后通过脚本操作这些输入设备,实现一些想要的操作,进而通过循环实现自动化测试. $ adb shell cat /proc/bus/input/devices 这条命令就是显示系统的输入设备列表,自己需要去了解这些设备的含义,进而去操作这些设备!我们这里需要操作的是touch,从下图中可以看到touch的事件是event1. 下面我们以屏幕触摸输入为例.

前端实现滑动解锁

上代码: <template> <div> <div id="box"> <div class="bgColor"></div> <div class="txt" >滑动解锁</div> <!--给i标签添加上相应字体图标的类名即可--> <div class="slider"> <i v-show="!