1 // 2 // ViewController.h 3 // 08-通讯录 4 // 5 // Created by zjj on 15/5/10. 6 // Copyright (c) 2015年 zjj. All rights reserved. 7 // 8 9 #import <UIKit/UIKit.h> 10 11 @interface ViewController : UIViewController 12 - (IBAction)add:(UIBarButtonItem *)sender; 13 - (IBAction)remove:(UIBarButtonItem *)sender; 14 @property (strong, nonatomic) IBOutlet UIBarButtonItem *removes; 15 16 @end
1 // 2 // ViewController.m 3 // 08-通讯录 4 // 5 // Created by zjj on 15/5/10. 6 // Copyright (c) 2015年 zjj. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 #define kDuation 0.5 11 #define kRowH 50 12 #define kNameTag 10 13 //类扩展 (class extension 匿名分类)用于扩展 内部可以声明本类全局引用私有变量 14 @interface ViewController () 15 { 16 CGFloat _rowY ; 17 NSArray *_allNames; // 苹果官方规则成员变量必须以下划线开头 18 } 19 @end 20 21 @implementation ViewController 22 #pragma mark 控制器的view加载完毕的时候调用一次 23 - (void)viewDidLoad 24 { 25 [super viewDidLoad]; 26 _allNames = @[@"加菲猫吃饭",@"加菲猫打瞌睡",@"加菲猫喝茶",@"加菲猫乘地铁",@"加菲猫敲代码",@"加菲猫打电话",@"加菲猫听音乐",@"加菲猫起床",@"加菲猫奶孩子"]; 27 28 } 29 #pragma mark 添加一行 30 - (IBAction)add:(UIBarButtonItem *)sender { 31 // 0取出最后一个子控件 32 UIView *lastView = [self.view.subviews lastObject]; 33 // 这行的Y = 最后一个控件的Y值+控件的高度+间距 34 _rowY = lastView.frame.origin.y + lastView.frame.size.height + 5; 35 // 创建一行 36 UIView *rowView = [self createRowline]; 37 // 添加一行到控制器view中 38 [self.view addSubview:rowView ]; 39 _removes.enabled = YES;// 启用删除 40 // 设置动画开始前的控件属性 41 rowView.frame = CGRectMake(375, _rowY, 375, 50); 42 rowView.alpha = 0;// 设置透明度 43 // 执行动画 44 [UIView animateWithDuration:kDuation animations:^{ 45 // 改变控件属性 46 rowView.frame = CGRectMake(0, _rowY, 375, 50); 47 rowView.alpha = 1; 48 }]; 49 } 50 #pragma mark 创建一行 添加头像和文字 51 - (UIView *)createRowline 52 { 53 // 1.添加父控件 54 UIView *rowView = [[UIView alloc]init]; 55 rowView.frame = CGRectMake(0, _rowY, 375, 50); 56 rowView.backgroundColor = [UIColor whiteColor]; 57 // 2.添加文字 58 UILabel *name = [[UILabel alloc]init]; 59 name.frame = CGRectMake(0, 0, self.view.frame.size.width, kRowH); 60 name.text = _allNames[arc4random_uniform((int)_allNames.count)]; 61 name.textAlignment = UITextAlignmentCenter; 62 name.backgroundColor = [UIColor clearColor]; 63 name.tag = kNameTag; 64 [rowView addSubview:name]; 65 // 3.添加头像 创建子控件 添加到父控件行中 66 UIButton *icon = [UIButton buttonWithType:UIButtonTypeCustom]; 67 icon.frame = CGRectMake(20, 0, 50, kRowH); 68 //创建随机头像 69 // int randomIndex = arc4random() % 9;//取0-8随机整数(老写法) 70 int randomIndex = arc4random_uniform(9);//取0-8随机整数 71 NSString *imgNames = [NSString stringWithFormat:@"0%d.jpg",randomIndex]; 72 UIImage *img = [UIImage imageNamed:imgNames]; 73 // 给按钮添加监听器 74 [icon addTarget:self action:@selector(iconClick:) forControlEvents:UIControlEventTouchUpInside]; 75 //保持头像宽高不变形 76 [icon setImage:img forState:UIControlStateNormal]; 77 [rowView addSubview:icon]; 78 // 删除按钮 79 UIButton *delete = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 80 delete.frame = CGRectMake(320, 0, 60, 60); 81 [delete setTitle:@"删除" forState:UIControlStateNormal]; 82 [delete addTarget:self action:@selector(delClick:) forControlEvents:UIControlEventTouchUpInside]; 83 [rowView addSubview:delete]; 84 return rowView; 85 } 86 #pragma mark 监听删除按钮点击 87 - (void)delClick :(UIButton *)btn 88 { 89 [UIView animateWithDuration:kDuation animations:^{ 90 // 移动待删除行整体移动到右方 91 CGRect tempF = btn.superview.frame; 92 tempF.origin.x = 375; 93 btn.superview.frame = tempF; 94 btn.superview.alpha = 0; 95 } completion:^(BOOL finished) { 96 // 1.获得即将删除这行 仔数组中的位置 97 int startIndex = (int)[self.view.subviews indexOfObject:btn.superview]; 98 // 3.删除当前行 99 [btn.superview removeFromSuperview]; 100 [UIView animateWithDuration:kDuation animations:^{ 101 // 2.遍历子控件 自动上移删除行下方子控件 102 for (int i = startIndex; i < self.view.subviews.count; i++) { 103 UIView *child = self.view.subviews[i]; 104 CGRect tempF = child.frame; 105 tempF.origin.y -= kRowH + 1;// 添加时候是每行+1 106 child.frame = tempF; 107 } 108 }]; 109 // 4.判断垃圾桶 110 _removes.enabled = self.view.subviews.count > 1; 111 }]; 112 } 113 #pragma mark 监听头像点击 114 - (void)iconClick :(UIButton *)btn 115 { 116 // 1.取得按钮的父控件(因为lable和btn在同一父控件) 117 // 获得按钮点击行的文本标签 118 UILabel *label = (UILabel *)[btn.superview viewWithTag:10]; 119 // NSLog(@"iconClick%f",btn.superview.frame.origin.y); 120 NSLog(@"%@",label.text); 121 } 122 123 #pragma mark 删除一行 124 - (IBAction)remove:(UIBarButtonItem *)sender { 125 UIView *lastView = [self.view.subviews lastObject]; 126 [UIView animateWithDuration:kDuation animations:^{ 127 CGRect tempF = lastView.frame; 128 tempF.origin.x = 375; 129 lastView.frame = tempF; 130 lastView.alpha = 1; 131 } completion:^(BOOL finished) {//动画执行完毕后自动调用这个代码段 132 [lastView removeFromSuperview]; 133 // 剩下子控件个数大于1才能点击删除 c语言写法 134 _removes.enabled = self.view.subviews.count > 1; 135 }]; 136 } 137 @end