IOS-DEMO1 PLLSlideToUnlock

描述:模仿开源组建完成的一个滑动解锁控件
效果如图:


思路如下:
1.重写redraw 绘制背景(2个圆圈)以及控件slider。
2.为slider新增panGesture 从而实现拖动效果。
3.gesture的相应函数根据不同情况回调delegate完成自定义状态修改。

注意:
1.redraw默认背景是黑色,需要改为白色。
2.之前对@property 的assign 不是很熟悉这次有新的了解,这个使用在常量上如此次使用在CGFloat上,此时在.m仅实现属性的get方法是不会被提示需要实现set方法的。
3.CGRectGet****系列的用法
4.min() max() pow() sqrt()的熟悉

待改善:
1.可以设置slider-图片大小等
2.可以设置背景的2个圈圈的大小以及可以选择填充。

代码:

//
//  PLLSlideToUnlock.h
//  SlideToUnlock
//
//  Created by liu poolo on 14-7-28.
//  Copyright (c) 2014年 liu poolo. All rights reserved.
//

#import <UIKit/UIKit.h>

@protocol PLLSlideToUnlockDelegate <NSObject>

@required
-(void)beginPanning;
-(void)statusChangeLock;
-(void)statusChangeUnLock;
-(void)doLock;
-(void)doUnlock;
-(void)endPanning;

@end

@interface PLLSlideToUnlock : UIView
@property (nonatomic,assign) CGFloat  raidusInside;
@property (nonatomic,assign) CGFloat raidusOutside;
@property id<PLLSlideToUnlockDelegate> delegate;


@end




//
//  PLLSlideToUnlock.m
//  SlideToUnlock
//
//  Created by liu poolo on 14-7-28.
//  Copyright (c) 2014年 liu poolo. All rights reserved.
//

#import "PLLSlideToUnlock.h"

const static CGFloat default_raidus = 25.0f;

@interface PLLSlideToUnlock(){
    BOOL _statusLocked;
}
@property (nonatomic, strong) UIView* slider;



@end

@implementation PLLSlideToUnlock

-(CGFloat)raidusInside{
    return _raidusInside?:default_raidus;
}

-(CGFloat)raidusOutside{
    if(_raidusInside){
        return _raidusInside;
    }
    CGFloat height=CGRectGetHeight(self.bounds);
    CGFloat width=CGRectGetWidth(self.bounds);
    return MIN(height, width)/2;
}


- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    _statusLocked=YES;
    [self setBackgroundColor:[UIColor clearColor]];
    if (self) {

    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    [self drawRaidus:self.raidusInside withColor:[UIColor blueColor]];
    [self drawRaidus:self.raidusOutside withColor:[UIColor greenColor]];
    [self addButtonAtCenter];
    [self addPingesture];

   
}

- (void)drawRaidus:(NSInteger)radius withColor:(UIColor*)color
{
    CGContextRef context=UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 1.0f);
    CGContextSetStrokeColorWithColor(context, color.CGColor);
    CGRect rect=CGRectMake(self.center.x-radius, self.center.y-radius, radius*2, radius*2);
    CGContextAddEllipseInRect(context, rect);
    CGContextStrokePath(context);
}

- (void)addButtonAtCenter{
    self.slider = [[UIView alloc] initWithFrame:CGRectMake(self.center.x, self.center.y, self.raidusInside*2, self.raidusInside*2)];
    self.slider.clipsToBounds=YES;
    self.slider.layer.cornerRadius=self.raidusInside;
    [self.slider setBackgroundColor:[UIColor redColor]];
    [self addSubview:self.slider];
    self.slider.center=self.center;
}

-(void)addPingesture{
   
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePan:)];
    [self.slider addGestureRecognizer:panGesture];

   
}

-(void)handlePan:(UIPanGestureRecognizer*)pan{
   
    if (pan.state==UIGestureRecognizerStateBegan) {
        if([self.delegate respondsToSelector:@selector(beginPanning)]){
            [self.delegate beginPanning];
        }
       
    }else if (pan.state==UIGestureRecognizerStateChanged) {
        CGPoint trasnlationPoint=[pan translationInView:pan.view];
        self.slider.center=CGPointMake(self.center.x+trasnlationPoint.x, self.center.y+trasnlationPoint.y);

        if(sqrt(pow(trasnlationPoint.x, 2)+pow(trasnlationPoint.y, 2))>(self.raidusInside+self.raidusOutside)){
            if(_statusLocked){
                if([self.delegate respondsToSelector:@selector(statusChangeUnLock)]){
                    //解锁
                    _statusLocked=NO;
                    [self.delegate statusChangeUnLock];
                }

            }
        }else{
            if(!_statusLocked&&!_statusLocked){
                if([self.delegate respondsToSelector:@selector(statusChangeLock)]){
                    //解锁
                    _statusLocked=YES;
                    [self.delegate statusChangeLock];
                }
               
            }
        }
       
    }else if (pan.state==UIGestureRecognizerStateEnded) {
        if(_statusLocked){
            if([self.delegate respondsToSelector:@selector(doLock)]){
                //执行锁屏操作
                _statusLocked=NO;
                [self.delegate doLock];
            }
           
        }else{
            if([self.delegate respondsToSelector:@selector(doUnlock)]){
                //执行解锁操作
                _statusLocked=NO;
                [self.delegate doUnlock];
            }
           
        }
        [UIView animateWithDuration:0.2f animations:^{
            self.slider.center=self.center;
        }];
    }
   
}




@end
### 配置 CentOS 7 的 DHCP 网络连接 为了在 CentOS 7 上设置和配置 DHCP 网络连接,以下是详细的说明: #### 使用 NetworkManager 工具进行网络配置 CentOS 7 默认提供了 `NetworkManager` 来管理网络接口。可以通过图形界面或者命令行工具对其进行操作。 1. **确认 DHCP 客户端已安装** 在大多数 Linux 发行版中,DHCP 客户端通常是默认安装的。如果不确定是否已经安装了 DHCP 客户端,可以运行以下命令检查: ```bash rpm -q dhclient ``` 如果未安装,则可以使用以下命令进行安装: ```bash sudo yum install dhclient ``` 2. **编辑网络接口文件** 编辑 `/etc/sysconfig/network-scripts/ifcfg-<interface>` 文件(其中 `<interface>` 是您的网络接口名称),将其更改为支持 DHCP 自动获取 IP 地址模式。例如,对于名为 `eth0` 的网络接口,执行如下命令打开该文件: ```bash sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0 ``` 修改或添加以下参数以启用 DHCP 功能: ```plaintext BOOTPROTO=dhcp ONBOOT=yes NM_CONTROLLED=no ``` 参数解释: - `BOOTPROTO=dhcp`: 表明此接口应通过 DHCP 获取地址。 - `ONBOOT=yes`: 启动时自动激活此接口。 - `NM_CONTROLLED=no`: 停用 NetworkManager 对此接口的控制[^1]。 3. **重启网络服务** 更改完成后,重新启动网络服务使更改生效: ```bash sudo systemctl restart network ``` 4. **验证网络状态** 可以使用以下命令查看当前分配给设备的 IP 地址以及其他网络信息: ```bash ip addr show eth0 ``` 或者使用传统的 `ifconfig` 命令(需先安装 net-tools 软件包): ```bash ifconfig eth0 ``` 5. **解决可能存在的问题** 若遇到无法正常获得 IP 地址的情况,可尝试禁用并重新启用虚拟机中的 VMnet8 网络适配器,这有助于清除之前的 DHCP 租约冲突[^2]。 6. **测试连通性** 测试与其他主机之间的通信能力,比如向外部服务器发送 ICMP 请求数据包: ```bash ping www.google.com ``` 以上步骤能够帮助你在 CentOS 7 平台上完成基本的 DHCP 网络配置工作[^3]。 ```python import subprocess def test_network_connection(): try: result = subprocess.run(['ping', '-c', '1', 'www.google.com'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) if result.returncode == 0: print("Network connection is successful.") else: print("Failed to connect to the network.") except Exception as e: print(f"An error occurred: {e}") test_network_connection() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值