You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

284 lines
9.8 KiB

//
// PickerView.m
// Hu8huWorker
//
// Created by xiaopeng on 2017/4/24.
// Copyright © 2017年 王小朋. All rights reserved.
//
#import "WXPPickerView.h"
#define onePickerH 50
#define midPickerH 50
#define Screen_Width [[UIScreen mainScreen] bounds].size.width
#define Screen_Height [[UIScreen mainScreen] bounds].size.height
#define LTColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)]
#define UIColorFromRGB(argbValue) [UIColor colorWithRed:((float)((argbValue & 0x00FF0000) >> 16))/255.0 green:((float)((argbValue & 0x0000FF00) >> 8))/255.0 blue:((float)(argbValue & 0x000000FF))/255.0 alpha:((float)((argbValue & 0xFF000000) >> 24))/255.0]
@interface WXPPickerView ()<UIScrollViewDelegate>{
UIWindow *_window;
UITapGestureRecognizer *_gesture;
UIView *_view;
int _seleNum;
}
@property (strong, nonatomic) UIView * select;
@property (strong, nonatomic) UIScrollView * startTime;
@property (strong, nonatomic) UIView * all;
@property (strong, nonatomic) UILabel * allText;
@property (strong, nonatomic) UISwitch * allSwithch;
@property (assign, nonatomic) NSInteger num;
@property (strong, nonatomic) NSMutableArray * midArry;
@end
@implementation WXPPickerView
- (instancetype)initWithFrame:(CGRect)frame midArry:(NSMutableArray *)midArry{
self = [super initWithFrame:frame];
if (self) {
_midArry = midArry;
/**
处理数组
*/
[_midArry insertObject:@"数组第一位" atIndex:0];
[_midArry insertObject:@" " atIndex:1];
//[_midArry addObject:@" "];
[_midArry addObject:@"数组最后一位"];
}
return self;
}
- (void)addStart:(CGRect)frame leftArry:(NSArray *)leftArry{
for(NSInteger index = 0; index < leftArry.count; index++){
NSString * title = @"";
if(index != 0 && index != leftArry.count-1){
title = [NSString stringWithFormat:@"%@",leftArry[index]];
}
UILabel *_startTime1 = [[UILabel alloc] initWithFrame:CGRectMake(0, index*onePickerH, frame.size.width,onePickerH)];
[_startTime1 setText:title];
_startTime1.tag = 10 + index;
[_startTime1 setTextAlignment:NSTextAlignmentCenter];
if (index == 2) {
[_startTime1 setTextColor:UIColorFromRGB(0xff38acff)];
[_startTime1 setFont:[UIFont systemFontOfSize:15]];
}else{
[_startTime1 setTextColor:UIColorFromRGB(0xff333333)];
[_startTime1 setFont:[UIFont systemFontOfSize:13]];
}
[self.startTime addSubview:_startTime1];
}
[self.startTime setContentSize:CGSizeMake(frame.size.width/2,onePickerH*leftArry.count)];
}
//4、已经结束拖拽,手指刚离开view的那一刻
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
if(!decelerate){
int pointY=scrollView.contentOffset.y;
CGFloat f = pointY %onePickerH;
int s = pointY/onePickerH;
int s1 = s;
if(f>20){
s1 = s+1;
NSLog(@"%d",s1*onePickerH);
[scrollView setContentOffset:CGPointMake(0, s1*onePickerH) animated:YES];
}else{
s1 = s;
NSLog(@"%d",s1*onePickerH);
[scrollView setContentOffset:CGPointMake(0, s1*onePickerH) animated:YES];
}
for (int i = 0; i < _num; i++) {
if ( i == s1+2) {
UILabel * textLabel = [self.startTime viewWithTag:i+10];
NSLog(@"%@",textLabel.text);
textLabel.textColor = UIColorFromRGB(0xff38acff);
textLabel.font = [UIFont systemFontOfSize:15];
}else{
UILabel * textLabel = [self.startTime viewWithTag:i+10];
textLabel.textColor = UIColorFromRGB(0xff333333);
textLabel.font = [UIFont systemFontOfSize:13];
}
}
_seleNum = s1;
if ([self.delegate respondsToSelector:NSSelectorFromString(@"PickerViewOneDelegateOncleck:")]) {
[self.delegate PickerViewOneDelegateOncleck:s1];
}
}
}
//6view已经停止滚动
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
int pointY=scrollView.contentOffset.y;
CGFloat f = pointY %onePickerH;
int s = pointY/onePickerH;
int s1;
if(f>20){
s1 = s+1;
NSLog(@"%d",s1*onePickerH);
[scrollView setContentOffset:CGPointMake(0, s1*onePickerH) animated:YES];
}else{
s1 = s;
NSLog(@"%d",s1*onePickerH);
[scrollView setContentOffset:CGPointMake(0, s1*onePickerH) animated:YES];
}
for (int i = 0; i < _num; i++) {
if ( i == s1+2) {
UILabel * textLabel = [self.startTime viewWithTag:i+10];
NSLog(@"%@",textLabel.text);
textLabel.textColor = UIColorFromRGB(0xff38acff);
textLabel.font = [UIFont systemFontOfSize:15];
}else{
UILabel * textLabel = [self.startTime viewWithTag:i+10];
textLabel.textColor = UIColorFromRGB(0xff333333);
textLabel.font = [UIFont systemFontOfSize:13];
}
}
_seleNum = s1;
//if ([self.delegate respondsToSelector:NSSelectorFromString(@"PickerViewOneDelegateOncleck:")]) {
// [self.delegate PickerViewOneDelegateOncleck:s1];
//}
}
#pragma mark 打开与关闭方法
-(void)show{
[self setUI];
[UIView animateWithDuration:0.3 animations:^{
self.frame = CGRectMake(0, Screen_Height - 300, Screen_Height, 300);
}];
[self setIsShow:YES];
}
-(void)close{
//移除点击手势
[_window removeGestureRecognizer:_gesture];
_gesture = nil;
[UIView animateWithDuration:0.2 animations:^{
self.frame = CGRectMake(0, Screen_Height, Screen_Width, 300);
} completion:^(BOOL finished) {
for(id subv in [self subviews])
{
[subv removeFromSuperview];
}
[_view removeFromSuperview];
}];
[self setIsShow:NO];
if ([self.delegate respondsToSelector:NSSelectorFromString(@"PickerViewCloseButtonOncleck")]) {
[self.delegate PickerViewCloseButtonOncleck];
}
}
- (void)setUI{
self.frame = CGRectMake(0, Screen_Height, Screen_Width, 300);
_num = _midArry.count;
UIView * topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 50)];
[topView setBackgroundColor:UIColorFromRGB(0xff38acff)];
[self addSubview:topView];
UIButton *leftBtn = [[UIButton alloc]init];
leftBtn.frame = CGRectMake(15, 0, 40, 50);
[leftBtn setTitle:@"取消" forState:UIControlStateNormal];
[leftBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[leftBtn addTarget:self action:@selector(leftbtnOnclick) forControlEvents:UIControlEventTouchUpInside];
[topView addSubview:leftBtn];
if ([_isTitle isEqualToString:@"1"]) {
UILabel *titleLable = [[UILabel alloc]init];
titleLable.frame = CGRectMake(Screen_Width/2-50, 0, 100, 50);
titleLable.text = _title;
titleLable.textAlignment = NSTextAlignmentCenter;
titleLable.font = [UIFont systemFontOfSize:18];
titleLable.textColor = [UIColor whiteColor];
[topView addSubview:titleLable];
}
UIButton *rightBtn = [[UIButton alloc]init];
rightBtn.frame = CGRectMake(Screen_Width-15-100, 0, 100, 50);
[rightBtn setTitle:_rightBtnTitle forState:UIControlStateNormal];
rightBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentRight;
[rightBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[rightBtn addTarget:self action:@selector(rightBtnOnclick) forControlEvents:UIControlEventTouchUpInside];
[topView addSubview:rightBtn];
self.select = [[UIView alloc] initWithFrame:CGRectMake(0, 50, self.frame.size.width, 250)];
[self addSubview:self.select];
self.startTime = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height-50)];
self.startTime.delegate = self;
[self.startTime setShowsVerticalScrollIndicator:NO];
[self.startTime setShowsHorizontalScrollIndicator:NO];
[self.select addSubview:self.startTime];
[self addStart:self.frame leftArry:_midArry];
UIView * seleViewColor = [[UIView alloc] initWithFrame:CGRectMake(0, 100, self.frame.size.width, 50)];
[seleViewColor setBackgroundColor:UIColorFromRGB(0xfff3faff)];
[self.select addSubview:seleViewColor];
[self.select bringSubviewToFront:self.startTime];
UIView * line1 = [[UIView alloc] initWithFrame:CGRectMake(0, onePickerH, self.frame.size.width, 1)];
[line1 setBackgroundColor:UIColorFromRGB(0xffc3e1f6)];
[self addSubview:line1];
UIView * line3 = [[UIView alloc] initWithFrame:CGRectMake(0, onePickerH*3, self.frame.size.width, 1)];
[line3 setBackgroundColor:UIColorFromRGB(0xffc3e1f6)];
[self addSubview:line3];
UIView * line4 = [[UIView alloc] initWithFrame:CGRectMake(0, onePickerH*4, self.frame.size.width, 1)];
[line4 setBackgroundColor:UIColorFromRGB(0xffc3e1f6)];
[self addSubview:line4];
_window = [UIApplication sharedApplication].keyWindow;
[_window addSubview:self];
_gesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(close)];
[_window addGestureRecognizer:_gesture];
_view = [[UIView alloc]initWithFrame:_window.bounds];
_view.backgroundColor = LTColor(0, 0, 0, 0.8);
[_window addSubview:_view];
[_view addSubview:self];
}
- (void)leftbtnOnclick{
[self close];
}
- (void)rightBtnOnclick{
if ([self.delegate respondsToSelector:NSSelectorFromString(@"PickerViewOneDelegateOncleck:")]) {
[self.delegate PickerViewOneDelegateOncleck:_seleNum];
}
[self close];
}
@end