#import <UIKit/UIKit.h>
@interface VCRoot : UIViewController
//定义一个工具栏视图
@property (retain,nonatomic) UIView* mToolBarView ;
@end
#import "VCRoot.h"
#import "ChechBox.h"
@interface VCRoot ()
@end
@implementation VCRoot
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
//创建工具栏视图对象
CGFloat width = self.view.frame.size.width/5;
_mToolBarView = [[UIView alloc] init] ;
_mToolBarView.frame = CGRectMake(0, self.view.frame.size.height-44, 320, 44) ;
//设置背景颜色
_mToolBarView.backgroundColor = [UIColor colorWithRed:0.3 green:0.0 blue:0.5 alpha:0.8f] ;
[self.view addSubview:_mToolBarView] ;
//按钮到视图中
UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect] ;
btn.frame = CGRectMake(0, 2, width, 40) ;
[btn addTarget:self action:@selector(pressBtn) forControlEvents:UIControlEventTouchUpInside] ;
[btn setTitle:@"按钮" forState:UIControlStateNormal] ;
[_mToolBarView addSubview:btn] ;
UILabel* label = [[UILabel alloc] init] ;
label.frame = CGRectMake(width, 2, width, 40) ;
label.text = @"标签";
label.textAlignment = NSTextAlignmentCenter ;
//标签的手势
UITapGestureRecognizer* tapLabel = [[UITapGestureRecognizer alloc] init] ;
tapLabel.numberOfTapsRequired = 1 ;
[tapLabel addTarget:self action:@selector(pressLabel)] ;
//将标签添加一个手势
[label addGestureRecognizer:tapLabel] ;
label.userInteractionEnabled = YES ;
//自定义按钮
UIButton* btnCustom = [UIButton buttonWithType:UIButtonTypeCustom] ;
btnCustom.frame = CGRectMake(width*2, 2, width, 40) ;
[btnCustom setImage:[UIImage imageNamed:@"iphone-on.png"] forState:UIControlStateNormal];
[btnCustom setImage:[UIImage imageNamed:@"iphone-off.png"] forState:UIControlStateHighlighted];
[btnCustom addTarget:self action:@selector(pressBtnCus) forControlEvents:UIControlEventTouchUpInside] ;
[_mToolBarView addSubview:label] ;
[_mToolBarView addSubview:btnCustom] ;
UIImageView* iView = [[UIImageView alloc] init] ;
iView.frame = CGRectMake(width*3, 2, width, 40) ;
iView.image = [UIImage imageNamed:@"pumpkin"] ;
//响应交互事件手势事件
//imageView默认为NO
iView.userInteractionEnabled = YES ;
UITapGestureRecognizer* tapTwo = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapImage:)] ;
//两次点击
tapTwo.numberOfTapsRequired = 2 ;
[iView addGestureRecognizer:tapTwo] ;
[_mToolBarView addSubview:iView] ;
self.navigationController.toolbar.hidden = YES ;
ChechBox* check = [[ChechBox alloc] init] ;
check.frame = CGRectMake(width*4+width/3, 2, width, 32) ;
check.on = YES ;
[check addTarget:self action:@selector(checkAct:) forControlEvents:UIControlEventValueChanged] ;
[_mToolBarView addSubview:check] ;
}
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
static BOOL isShow = NO ;
[UIView beginAnimations:nil context:nil] ;
[UIView setAnimationDuration:1] ;
if (isShow == NO) {
_mToolBarView.frame = CGRectMake(0, self.view.frame.size.height, 320, 44) ;//移动消失
// _mToolBarView.alpha = 0 ;//透明度渐变
}
else
{
_mToolBarView.frame = CGRectMake(0, self.view.frame.size.height-44, 320, 44) ;
// _mToolBarView.alpha = 1 ;
}
isShow = !isShow ;
[UIView commitAnimations] ;
}
-(void) checkAct:(ChechBox*) checkBox
{
NSLog(@"check = %@",checkBox) ;
}
-(void) pressBtn
{
NSLog(@"按钮按下!");
}
-(void) pressBtnCus
{
NSLog(@"自定义按钮按下!");
}
-(void) pressLabel
{
NSLog(@"标签按下!");
}
-(void) tapImage:(UITapGestureRecognizer*) tapTwo
{
NSLog(@"图片被双击!");
}
@end
#import <UIKit/UIKit.h>
//声明一个选择按钮
//UIControl:可以响应事件的控件对象
//UIControl:继承于UIView
@interface ChechBox : UIControl
{
//选中图片对象
UIImage* _imageSelect ;
//取消选中图片对象
UIImage* _imageNoSelect ;
//显示到视图上
UIImageView* _imageView ;
//选中状态
BOOL _on ;
//事件目标对象,当前控件的事件函数的拥有者对象
//_target:事件函数声明实现在对象中
//通常使用试图控器对象作为此值
id _target ;
//事件函数对象(指针)声明
//用来响应响应的事件处理
//通过外部来赋值
//实现在外部,_target对象中实现
SEL _selector ;
}
//定义on属性
@property (assign,nonatomic) BOOL on ;
//重新定义setOn函数
-(void) setOn:(BOOL)on ;
//设置选中状态图片
-(void) setSelectedImage:(UIImage*) image ;
//设置取消状态的图片
-(void) setNoSelectedImage:(UIImage*) image;
//添加事件函数声明
-(void) addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents ;
@end
#import "ChechBox.h"
@implementation ChechBox
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
//加载图片对象
_imageSelect = [UIImage imageNamed:@"selected"] ;
_imageNoSelect = [UIImage imageNamed:@"noselected"] ;
//创建视图
_imageView = [[UIImageView alloc] initWithImage:_imageNoSelect] ;
_imageView.contentMode = UIViewContentModeCenter;
//只能通过外部的参数设定位置
//不能设定控件的大小
_imageView.frame = CGRectMake(0, 0, 32, 32);
_target = nil ;
_selector = nil ;
_on = NO ;
[self addSubview:_imageView] ;
}
return self;
}
-(void) setSelectedImage:(UIImage *)image
{
_imageSelect = image ;
_imageView.image = _imageNoSelect ;
}
-(void) setNoSelectedImage:(UIImage *)image
{
_imageNoSelect = image ;
_imageView.image = _imageNoSelect ;
}
//添加设置事件函数
-(void) addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
{
// controlEvents == 0001100000
// UIControlEventValueChanged== 1000000000
// == 0000000000
if ((controlEvents &UIControlEventValueChanged) != 0)
{
_target = target ;
_selector = action ;
}
}
-(void) setOn:(BOOL)on
{
//状态改变
if (_on != on)
{
_on = on ;
if (_on == YES)
{
_imageView.image = _imageSelect ;
}
else if (_on == NO)
{
_imageView.image = _imageNoSelect ;
}
//respondsToSelector:target对象能否执行_selector函数
//功能:避免程序由于没有实现_selector,导致程序直接崩溃
//如果实现:返回值为YES
if ([_target respondsToSelector:_selector] == YES)
{
//通过target action模式执行事件函数
[_target performSelector:_selector withObject:self afterDelay:0] ;
}
}
}
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
self.on = !self.on ;
}
@end