iOS综合练习 哈欠阅读
来源:互联网 发布:free源码解析 编辑:程序博客网 时间:2024/04/30 15:29
常用第三方库:
pod "AFNetworking", “3.0.1”
pod 'MJExtension', '~> 3.0.10' 字典模型
pod 'Masonry', '~> 1.0.0'
pod 'SDWebImage', '~> 3.7.5'
pod 'IQKeyboardManager' 键盘
pod 'TZImagePickerController' 相册、拍照
DOPDropDownMenu - Enhanced 下拉菜单
SDAutoLayout 自适应高度宽度
SDCycleScrollView 轮播
SDRefeshView 上拉刷新
LZCartViewController 购物车
涉及知识点:table表偏移量,购物车利用block回传数值,个人资料出生日期选择,选择相册
#import "HomeViewController.h"
#import "SDCycleScrollView.h"
#import "HomeModels.h"
#import "HomeCell.h"
@interface HomeViewController ()<UITableViewDelegate,UITableViewDataSource>{
NSArray *photoArray;
SDRefreshFooterView *_refreshFooter;
}
@property (nonatomic,strong)NSArray *dataArray;
@property(nonatomic,retain)UITableView *tableView;
@property (nonatomic,assign)NSInteger rowCount;
@end
@implementation HomeViewController
#pragma mark - 加载数据
- (NSArray *)dataArray{
if (_dataArray ==nil) {
//路径
NSString *path = [[NSBundlemainBundle]pathForResource:@"Books"ofType:@"plist"];
//读取
NSArray *tempArray = [NSArrayarrayWithContentsOfFile:path];
//可变
NSMutableArray *mutableArray = [NSMutableArrayarray];
NSLog(@"%@",mutableArray);
//转换
for (NSDictionary *dictin tempArray) {
HomeModels *homeModels = [HomeModelsmj_objectWithKeyValues:dict];
[mutableArray addObject:homeModels];
NSLog(@"homeModels = %@",homeModels);
}
//赋值
_dataArray = mutableArray;
}
return_dataArray;
}
- (void)viewDidLoad {
[superviewDidLoad];
self.view.backgroundColor = [UIColorwhiteColor];
self.tableView = [[UITableViewalloc]initWithFrame:self.view.framestyle:UITableViewStylePlain];
[self.viewaddSubview:self.tableView];
UIView *headView = [[UIViewalloc]initWithFrame:CGRectMake(0,0,kMainScreenWidth,kMainScreenWidth+kMainScreenHeight/3)];
self.tableView.tableHeaderView = headView;
// 本地加载 ---创建不带标题的图片轮播器
NSArray *imageArray =@[@"DSC_2709.JPG",@"DSC_2792.JPG"];
SDCycleScrollView *cycleScrollView = [SDCycleScrollViewcycleScrollViewWithFrame:CGRectMake(0,0,kMainScreenWidth,kMainScreenHeight/3)shouldInfiniteLoop:YESimageNamesGroup:imageArray];
// cycleScrollView.delegate = self;
// cycleScrollView.pageControlStyle = SDCycleScrollViewPageContolStyleAnimated;
[headView addSubview:cycleScrollView];
//--- 轮播时间间隔,默认1.0秒,可自定义
//cycleScrollView.autoScrollTimeInterval = 4.0;
//4张图片按钮
NSArray *btnPhotos =@[@"DSC_2749.JPG",@"DSC_2784.JPG",@"DSC_2794.JPG",@"DSC_2712.JPG"];
for (int i =0; i<4; i++) {
float x = (i%2)*(kMainScreenWidth/2);
float y =CGRectGetMaxY(cycleScrollView.frame)+(i/2)*(kMainScreenWidth/2);
UIButton *imageBtn = [[UIButtonalloc]initWithFrame:CGRectMake(x, y,kMainScreenWidth/2,kMainScreenWidth/2)];
[imageBtn setImage:[UIImageimageNamed:btnPhotos[i]]forState:UIControlStateNormal];
// imageBtn.backgroundColor = [UIColor orangeColor];
imageBtn.tag = i;
[imageBtn addTarget:selfaction:@selector(getImageBtn:)forControlEvents:UIControlEventTouchUpInside];
[headView addSubview:imageBtn];
}
self.tableView.delegate =self;
self.tableView.dataSource =self;
// [self creatModelsWithCount:18];
_rowCount = (long)6;
[self.tableViewregisterClass:[HomeCellclass]forCellReuseIdentifier:NSStringFromClass([HomeCellclass])];
__weaktypeof(self) weakSelf =self;
// 上拉加载
_refreshFooter = [SDRefreshFooterViewrefreshView];
[_refreshFooteraddToScrollView:self.tableView];
__weaktypeof(_refreshFooter) weakRefreshFooter =_refreshFooter;
_refreshFooter.beginRefreshingOperation = ^() {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 *NSEC_PER_SEC)),dispatch_get_main_queue(), ^{
// [weakSelf creatModelsWithCount:10];
weakSelf.rowCount +=6;
[weakSelf.tableViewreloadData];
[weakRefreshFooter endRefreshing];
});
};
[self.tableViewreloadData];
}
-(void)getImageBtn:(UIButton *)imageBtn{
}
- (void)cycleScrollView{
// 本地加载 ---创建不带标题的图片轮播器
NSArray *imageArray =@[@"DSC_2709.JPG",@"DSC_2749.JPG",@"DSC_2792.JPG"];
SDCycleScrollView *cycleScrollView = [SDCycleScrollViewcycleScrollViewWithFrame:CGRectMake(0,0,kMainScreenWidth,kMainScreenHeight/3)shouldInfiniteLoop:YESimageNamesGroup:imageArray];
// cycleScrollView.delegate = self;
cycleScrollView.pageControlStyle =SDCycleScrollViewPageContolStyleAnimated;
[self.viewaddSubview:cycleScrollView];
// [self.view addSubview:cycleScrollView];
// cycleScrollView.scrollDirection = UICollectionViewScrollDirectionVertical;
// --- 轮播时间间隔,默认1.0秒,可自定义
//cycleScrollView.autoScrollTimeInterval = 4.0;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
#warning Incomplete implementation, return the number of sections
return1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
#warning Incomplete implementation, return the number of rows
returnself.dataArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
Class currentClass = [HomeCellclass];
HomeCell *cell =nil;
HomeModels *model =_dataArray[indexPath.row];
cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(currentClass)];
cell.model = model;
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
Class currentClass = [HomeCellclass];
HomeModels *model =_dataArray[indexPath.row];
/*
普通版也可实现一步设置搞定高度自适应,不再推荐使用此套方法,具体参看“UITableView+SDAutoTableViewCellHeight”头文件
return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:currentClass];
*/
// 推荐使用此普通简化版方法(一步设置搞定高度自适应,性能好,易用性好)
return [self.tableViewcellHeightForIndexPath:indexPathmodel:modelkeyPath:@"model"cellClass:currentClasscontentViewWidth:[selfcellContentViewWith]];
}
- (CGFloat)cellContentViewWith
{
CGFloat width = [UIScreenmainScreen].bounds.size.width;
// 适配ios7横屏
if ([UIApplicationsharedApplication].statusBarOrientation !=UIInterfaceOrientationPortrait && [[UIDevicecurrentDevice].systemVersionfloatValue] < 8) {
width = [UIScreenmainScreen].bounds.size.height;
}
return width;
}
#import "HomeCell.h"
#import "HomeModels.h"
@implementation HomeCell
{
UILabel *_titleLabel;
UIImageView *_imageView;
UILabel *_price;
}
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [superinitWithStyle:stylereuseIdentifier:reuseIdentifier]) {
[selfsetup];
}
returnself;
}
- (void)setup
{
_titleLabel = [UILabelnew];
[self.contentViewaddSubview:_titleLabel];
_titleLabel.textColor = [UIColordarkGrayColor];
_titleLabel.font = [UIFontsystemFontOfSize:15];
_titleLabel.numberOfLines =0;
_imageView = [UIImageViewnew];
[self.contentViewaddSubview:_imageView];
_imageView.layer.borderColor = [UIColorgrayColor].CGColor;
_imageView.layer.borderWidth =1;
_price = [UILabelnew];
[self.contentViewaddSubview:_price];
CGFloat margin =15;
UIView *contentView =self.contentView;
_imageView.sd_layout
.topSpaceToView(contentView, margin)//距离顶
.leftSpaceToView(contentView, margin)//左边
.widthIs(60)//宽度长
.autoHeightRatio (1.2);//高度自适应与宽比例
_titleLabel.sd_layout
.leftSpaceToView(_imageView, margin)
.topSpaceToView(contentView, margin)
.rightSpaceToView(contentView, margin)
.autoHeightRatio(0);
_price.sd_layout
.leftSpaceToView(_imageView, margin)
.bottomEqualToView(_imageView) //与图片底平
.rightSpaceToView(contentView, margin)
.heightIs(20);
// 当你不确定哪个view在自动布局之后会排布在cell最下方的时候可以调用次方法将所有可能在最下方的view都传过去
[selfsetupAutoHeightWithBottomViewsArray:@[_imageView,_titleLabel,_price]bottomMargin:margin];
}
- (void)setModel:(HomeModels *)model
{
_model = model;
_titleLabel.text = model.name;
NSString *str = model.icon;
_price.text =[NSStringstringWithFormat:@"¥%ld",model.price];
_imageView.image = [UIImageimageNamed:str];
}
#import "EnjoyViewController.h"
#import "HomeModels.h"
#import "EnjoyCell.h"
#import "LZCartViewController.h"
#import "ShoppingViewController.h"
#import "LZCartModel.h"
#import "DOPDropDownMenu.h"
@interface EnjoyViewController ()<UITableViewDelegate,UITableViewDataSource,UITableViewDataSource,UISearchBarDelegate,DOPDropDownMenuDelegate,DOPDropDownMenuDataSource>{
NSArray *photoArray;
SDRefreshFooterView *_refreshFooter;
UIView *headerView;
UISearchBar *searchbar;
float _oldOffset;//记录上次的偏移量
UIButton *bubbleBtn;
NSMutableArray *searchArray;//搜索后数组
}
@property (nonatomic,strong)NSArray *dataArray;
@property(nonatomic,retain)UITableView *tableView;
@property (nonatomic,assign)NSInteger rowCount;
@property (nonatomic,strong)NSMutableArray *selectArray;
//下拉菜单栏使用数组
@property (nonatomic,strong)NSArray *classifys;
@property (nonatomic,strong)NSArray *areas;
@property (nonatomic,strong)NSArray *sorts;
@property (nonatomic,weak)DOPDropDownMenu *menu;
//购物车动画
@property (nonatomic,strong)UIBezierPath *path;//购物车动画轨迹
@property (nonatomic,strong)CALayer *dotLayer;
@property (nonatomic,assign)CGFloat endPointX;
@property (nonatomic,assign)CGFloat endPointY;
@end
@implementation EnjoyViewController
#pragma mark - 加载数据
- (NSArray *)dataArray{
if (_dataArray ==nil) {
//路径
NSString *path = [[NSBundlemainBundle]pathForResource:@"Books"ofType:@"plist"];
//读取
NSArray *tempArray = [NSArrayarrayWithContentsOfFile:path];
//可变
NSMutableArray *mutableArray = [NSMutableArrayarray];
NSLog(@"%@",mutableArray);
//转换
for (NSDictionary *dictin tempArray) {
HomeModels *homeModels = [HomeModelsmj_objectWithKeyValues:dict];
[mutableArray addObject:homeModels];
NSLog(@"homeModels = %@",homeModels);
}
//赋值
_dataArray = mutableArray;
}
return_dataArray;
}
-(void)viewWillAppear:(BOOL)animated{
[superviewWillAppear:animated];
self.tabBarController.tabBar.hidden = NO;
//刷新下拉菜单栏
self.classifys =@[@"全部",@"乐享"];
[_menureloadData];
}
- (void)viewDidLoad {
[superviewDidLoad];
_selectArray = [NSMutableArrayarray];
searchArray =[NSMutableArrayarray];
[searchArraysetArray:self.dataArray];
_oldOffset =0; //记录上次的偏移量
self.view.backgroundColor = [UIColorwhiteColor];
self.tableView = [[UITableViewalloc]initWithFrame:CGRectMake(0,74, kMainScreenWidth, kMainScreenHeight)style:UITableViewStylePlain];
[self.viewaddSubview:self.tableView];
self.tableView.delegate =self;
self.tableView.dataSource =self;
//搜索框
[selfsearchBar];
//下拉菜单
[selfdropDownMenu];
//悬浮购物车按钮
[selfaddCarBtn];
//表尾部视图
UILabel *footerLb=[[UILabelalloc]initWithFrame:CGRectMake(0,10, kMainScreenWidth,40)];
footerLb.text =@"已全部加载完成";
footerLb.textAlignment =NSTextAlignmentCenter;
footerLb.textColor = [UIColorgrayColor];
footerLb.layer.borderColor = [UIColorgrayColor].CGColor;
footerLb.layer.borderWidth =0.5;
self.tableView.tableFooterView = footerLb;
}
//搜索框
-(void)searchBar{
searchbar = [[UISearchBaralloc]initWithFrame:CGRectMake(10,64,kMainScreenWidth-20,40)];
searchbar.delegate =self;
searchbar.placeholder =@"请输入商品名称关键字";
searchbar.searchBarStyle =UISearchBarStyleMinimal;
searchbar.backgroundColor = [UIColorwhiteColor];
[self.viewinsertSubview:searchbaraboveSubview:self.tableView];
}
//悬浮购物车按钮与提示数量的气泡按钮
- (void)addCarBtn
{
UIButton *carBtn = [UIButtonnew];
carBtn.frame =CGRectMake(0,kMainScreenHeight/2,30,30);
carBtn.layer.cornerRadius =15;
carBtn.layer.masksToBounds =YES;
carBtn.alpha =0.7;
[carBtn setImage:[UIImageimageNamed:@"car"]forState:UIControlStateNormal];
[carBtn addTarget:selfaction:@selector(clickBtn:)forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:carBtn];
CGRect rect = carBtn.frame;
_endPointX = rect.origin.x +15;
_endPointY = rect.origin.y +15;
//添加气泡
bubbleBtn = [UIButtonnew];
bubbleBtn.frame =CGRectMake(20,kMainScreenHeight/2-15,30,30);
[bubbleBtnsetBackgroundImage:[UIImageimageNamed:@"bubble"]forState:UIControlStateNormal];
[bubbleBtnsetTitleColor:[UIColorwhiteColor]forState:UIControlStateNormal];
bubbleBtn.titleLabel.font = [UIFont systemFontOfSize:13];
[self.viewinsertSubview:bubbleBtnaboveSubview:carBtn];
// bubbleBtn.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
// bubbleBtn.center = CGPointMake(0, 0);
[bubbleBtnsizeToFit];
bubbleBtn.hidden =YES;
// bubbleBtn.layer.anchorPoint = CGPointMake(1, 1);
bubbleBtn.userInteractionEnabled =NO;
}
//下拉菜单
-(void)dropDownMenu{
// 数据
self.classifys =@[@"全部",@"乐享"];
self.areas =@[@"全部距离",@"离我最近",@"<200m",@"500m",@"1000m",@"2000m",@">2000m"];
self.sorts =@[@"默认排序",@"价格↑",@"价格↓",@"销量↓",@"最新上架"];
// 添加下拉菜单
DOPDropDownMenu *menu = [[DOPDropDownMenualloc]initWithOrigin:CGPointMake(0,94)andHeight:44];
menu.delegate =self;
menu.dataSource =self;
menu.textSelectedColor = [UIColorredColor];//选中文字颜色
_menu = menu;
//将下拉菜单加在View上,重叠于表视图上方
[self.viewinsertSubview:_menuaboveSubview:self.tableView];
// 创建menu第一次显示不会调用点击代理,可以用这个手动调用
[menu selectDefalutIndexPath];
}
-(void)clickBtn:(UIButton *)carBtn{
NSLog(@"---------");
LZCartViewController *cartVC = [[LZCartViewControlleralloc]init];
cartVC.shoppingArray = [self.selectArraycopy];
// block回调接收传来的购物车中商品数组
cartVC.block = ^(NSMutableArray *dataCarArray){
[self.selectArrayremoveAllObjects];//清空上次存放选中商品的数组
for (int i=0; i<dataCarArray.count; i++) {
LZCartModel *carModel = [[LZCartModelalloc]init];
carModel = dataCarArray[i];
[_selectArrayaddObject:carModel];
}
//购物车商品类型数值显示与隐藏
if (_selectArray.count !=0) {
bubbleBtn.hidden =NO;
[bubbleBtnsetTitle:[NSStringstringWithFormat:@"%lu",(unsignedlong)self.selectArray.count]forState:UIControlStateNormal];
}else{
bubbleBtn.hidden =YES;
}
NSLog(@"_selectArray%@",_selectArray);
};
[selfpresentViewController:cartVCanimated:YEScompletion:nil];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
#warning Incomplete implementation, return the number of rows
returnself.dataArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
Class currentClass = [EnjoyCell class];
EnjoyCell *cell =nil;
HomeModels *model =_dataArray[indexPath.row];
cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(currentClass)];
cell.model = model;
cell.shoppingCar.tag = indexPath.row;
// Block 回调
__weak__typeof(&*cell) weakCell = cell;
cell.block = ^(NSInteger nCount){
//购物车动画
CGRect parentRect = [weakCellconvertRect:weakCell.shoppingCar.frametoView:self.view];
// 这里是动画开始的方法
[selfjoinCartAnimationWithRect:parentRect];
//获取选择数据
LZCartModel *carModel = [[LZCartModelalloc]init];
carModel.price = [NSStringstringWithFormat:@"¥%.02f",(double)model.price];
carModel.nameStr = model.name;
carModel.image = [UIImageimageNamed:model.icon];
carModel.goodsId = model.goodsId;
carModel.number = nCount;
carModel.dateStr =@"2016.9.1";
carModel.sizeStr =@"18*20cm";
BOOL isSame =NO;//记录是否购物车是否有相同商品
LZCartModel *models = [[LZCartModelalloc]init];
for (int i =0; i<self.selectArray.count; i++) {
models = self.selectArray[i];
if (models.goodsId == carModel.goodsId){
carModel.number = models.number;
carModel.number++; //修改模型中变量值
self.selectArray[i]= carModel;//修改数组中已有模型值
isSame = YES;
return;
}
}
if (!isSame) {
carModel.number =1;
[self.selectArrayaddObject:carModel];
}
NSLog(@"%@",self.selectArray);
bubbleBtn.hidden =NO;
[bubbleBtnsetTitle:[NSStringstringWithFormat:@"%lu",(unsignedlong)self.selectArray.count]forState:UIControlStateNormal];
};
return cell;
}
//当用户选择某一行时
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
ShoppingViewController *shoppingVC = [[ShoppingViewControlleralloc]init];
//获取选择的内容
HomeModels *homeModel =_dataArray[indexPath.row];
shoppingVC.bookName = homeModel.name;
shoppingVC.bookImage = homeModel.icon;
shoppingVC.price = homeModel.price;
shoppingVC.intro =homeModel.intro;
[self.navigationControllerpushViewController:shoppingVCanimated:YES];
// [self presentViewController:shoppingVC animated:YES completion:nil];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
Class currentClass = [EnjoyCell class];
HomeModels *model =_dataArray[indexPath.row];
/*
普通版也可实现一步设置搞定高度自适应,不再推荐使用此套方法,具体参看“UITableView+SDAutoTableViewCellHeight”头文件
return [self.tableView cellHeightForIndexPath:indexPath model:model keyPath:@"model" cellClass:currentClass];
*/
// 推荐使用此普通简化版方法(一步设置搞定高度自适应,性能好,易用性好)
return [self.tableViewcellHeightForIndexPath:indexPathmodel:modelkeyPath:@"model"cellClass:currentClasscontentViewWidth:[selfcellContentViewWith]];
}
- (CGFloat)cellContentViewWith
{
CGFloat width = [UIScreenmainScreen].bounds.size.width;
// 适配ios7横屏
if ([UIApplicationsharedApplication].statusBarOrientation !=UIInterfaceOrientationPortrait && [[UIDevicecurrentDevice].systemVersionfloatValue] < 8) {
width = [UIScreenmainScreen].bounds.size.height;
}
return width;
}
#pragma mark - DOPDropDownMenu
//设置列数
- (NSInteger)numberOfColumnsInMenu:(DOPDropDownMenu *)menu
{
return3;
}
//设置每列几行
- (NSInteger)menu:(DOPDropDownMenu *)menu numberOfRowsInColumn:(NSInteger)column
{
if (column ==0) {
returnself.classifys.count;
}elseif (column ==1){
returnself.areas.count;
}else {
returnself.sorts.count;
}
}
//返回 menu第column列每行title
- (NSString *)menu:(DOPDropDownMenu *)menu titleForRowAtIndexPath:(DOPIndexPath *)indexPath
{
if (indexPath.column ==0) {
returnself.classifys[indexPath.row];
} elseif (indexPath.column ==1){
returnself.areas[indexPath.row];
} else {
returnself.sorts[indexPath.row];
}
}
//点击菜单时响应
- (void)menu:(DOPDropDownMenu *)menu didSelectRowAtIndexPath:(DOPIndexPath *)indexPath
{
NSLog(@"点击了 %ld - %ld项目",indexPath.column,indexPath.row);
}
#pragma mark - scrollViewDelegate
//导航栏、搜索框、商品列表显示与隐藏
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
NSUInteger options =UIViewAnimationOptionAllowUserInteraction |UIViewAnimationCurveEaseIn;
NSLog(@"_oldOffset22222:%f",_oldOffset);
if (self.tableView.contentOffset.y > 0 ) {
[UIViewanimateKeyframesWithDuration:0.1fdelay:0.0options:optionsanimations:^{
self.navigationController.navigationBarHidden = YES;
searchbar.transform =CGAffineTransformTranslate(searchbar.transform,0, -148);//能够多次变化,每次变化都是以上一次的状态进行的变化
self.menu.transform =CGAffineTransformTranslate(self.menu.transform,0, -148);
self.tableView.frame = CGRectMake(0,-54,kMainScreenWidth,kMainScreenHeight);
} completion:^(BOOL finished) {
}];
}
if (self.tableView.contentOffset.y < _oldOffset) { //与上次偏移量进行比较
[UIViewanimateKeyframesWithDuration:0.1fdelay:0.0options:optionsanimations:^{
self.navigationController.navigationBarHidden = NO;
searchbar.transform =CGAffineTransformMakeTranslation(0,0);
self.menu.transform = CGAffineTransformMakeTranslation(0,0);
self.tableView.frame = CGRectMake(0,74,kMainScreenWidth, kMainScreenHeight);
} completion:^(BOOL finished) {
}];
}
_oldOffset = scrollView.contentOffset.y;//将当前位移变成缓存位移
NSLog(@"_oldOffset:%f",_oldOffset);
}
#pragma mark -加入购物车动画
-(void) joinCartAnimationWithRect:(CGRect)rect
{
CGFloat startX = rect.origin.x;
CGFloat startY = rect.origin.y;
_path= [UIBezierPathbezierPath];
[_pathmoveToPoint:CGPointMake(startX, startY)];
//三点曲线
[_pathaddCurveToPoint:CGPointMake(_endPointX,_endPointY)
controlPoint1:CGPointMake(startX, startY)
controlPoint2:CGPointMake(startX-180, startY -200)];
_dotLayer = [CALayerlayer];
_dotLayer.backgroundColor = [UIColorredColor].CGColor;
_dotLayer.frame =CGRectMake(0,0,15,15);
_dotLayer.cornerRadius = (15 +15) /4;
[self.view.layeraddSublayer:_dotLayer];
[selfgroupAnimation];
}
#pragma mark - 组合动画
-(void)groupAnimation
{
CAKeyframeAnimation *animation = [CAKeyframeAnimationanimationWithKeyPath:@"position"];
animation.path =_path.CGPath;
animation.rotationMode =kCAAnimationRotateAuto;
CABasicAnimation *alphaAnimation = [CABasicAnimationanimationWithKeyPath:@"alpha"];
alphaAnimation.duration =0.5f;
alphaAnimation.fromValue = [NSNumbernumberWithFloat:1.0];
alphaAnimation.toValue = [NSNumbernumberWithFloat:0.1];
alphaAnimation.timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseOut];
CAAnimationGroup *groups = [CAAnimationGroupanimation];
groups.animations =@[animation,alphaAnimation];
groups.duration =0.8f;
groups.removedOnCompletion =NO;
groups.fillMode =kCAFillModeForwards;
groups.delegate =self;
[groups setValue:@"groupsAnimation"forKey:@"animationName"];
[_dotLayeraddAnimation:groupsforKey:nil];
[selfperformSelector:@selector(removeFromLayer:)withObject:_dotLayerafterDelay:0.8f];
}
//移聊购物车动画
- (void)removeFromLayer:(CALayer *)layerAnimation{
[layerAnimation removeFromSuperlayer];
}
#pragma mark - UISearchBarDelegate
//监听搜索框内容变化
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self.dataArrayremoveAllObjects];
for (int i =0; i<searchArray.count; i++) {
HomeModels *models = [[HomeModelsalloc]init];
models = searchArray[i];
NSPredicate *predicate = [NSPredicatepredicateWithFormat:@"SELF CONTAINS[c] %@", searchText];
BOOL ret = [predicateevaluateWithObject:models.name];//判断是否包含
if (ret) {
[self.dataArrayaddObject:models];
}
}
[self.tableViewreloadData];
}
//添加搜索框事件:
-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
[searchBar setShowsCancelButton:YESanimated:YES];
// self.tableView.allowsSelection=NO;
// self.tableView.scrollEnabled=NO;
}
//添加Cancel事件:
-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
searchBar.text=@"";
[searchBar setShowsCancelButton:NOanimated:YES];
[searchBar resignFirstResponder];
[self.dataArrayremoveAllObjects];
[self.dataArrayaddObjectsFromArray:searchArray];
[self.tableViewreloadData];
// self.tableView.allowsSelection=YES;君主论会
// self.tableView.scrollEnabled=YES;
}
#import "PersonalDataViewController.h"
#import "PersonalModels.h"
#import "PersonalCell.h"
@interface PersonalDataViewController ()<UITableViewDelegate,UITableViewDataSource,UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource,UIActionSheetDelegate>{
UITableView *tableView;
NSDictionary *userDic;
NSArray *pickerData;
UIImage *iconImage;//头像
NSString *name; //昵称
NSString *iphoneNumber; //登录的手机号
NSString *birthday; //出生日期
NSString *gender; //性别
NSString *signature; //签名
NSString *iphoneN; //变更手机号
NSString *password; //支付密码
}
@property(retain,nonatomic)UIDatePicker *datePicker;
@end
@implementation PersonalDataViewController
- (void)viewDidLoad {
[superviewDidLoad];
self.navigationItem.title =@"个人资料";
self.view.backgroundColor = [UIColorgrayColor];
tableView = [[UITableViewalloc]init];
[self.viewaddSubview:tableView];
tableView.delegate =self;
tableView.dataSource =self;
tableView.sd_layout
.topEqualToView(self.view)
.leftEqualToView(self.view)
.rightEqualToView(self.view)
.heightIs(kMainScreenHeight);
//设置假数据
[selfuserDic];
//读取假数据
PersonalModels *model = [PersonalModelsmj_objectWithKeyValues:userDic];
iconImage = [UIImageimageNamed:model.iconImage];
name = model.name;
iphoneNumber = model.iphoneNumber;
birthday = model.birthday;
gender = model.gender;
signature = model.signature;
iphoneN = model.iphoneN;
password = model.password;
}
//设置数据
-(void)userDic{
PersonalModels *model = [PersonalModelsnew];
model.iconImage =@"tab_btn_user_nor";
model.iphoneNumber =@"13770937387";
model.gender =@"男";
userDic = [NSDictionarydictionary];
userDic = [modelmj_keyValues];
}
-(void)exit{
[self.navigationControllerpopViewControllerAnimated:YES];
}
#pragma mark - UItableViewDataSoure
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return3;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
switch (section) {
case0:
return6;
break;
case1:
return2;
break;
case2:
return1;
break;
default:
break;
}
return0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
staticNSString *cellID =@"cell";
PersonalCell *cell = [[PersonalCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:cellID];
cell.accessoryType =UITableViewCellAccessoryDisclosureIndicator;//箭头
if (indexPath.section ==0) {
switch (indexPath.row) {
case0:
cell.contentLb.text =@"头像";
cell.iconImage.image =iconImage;
cell.iconImage.backgroundColor = [UIColorwhiteColor];
cell.iconImage.layer.cornerRadius =30;
cell.iconImage.layer.masksToBounds =YES;
cell.iconImage.layer.borderWidth =0.5;
cell.iconImage.layer.borderColor = [UIColorblackColor].CGColor; [cell.titileTFremoveFromSuperview];
break;
case1:
cell.contentLb.text =@"昵称";
cell.titileTF.text =name;
cell.titileTF.tag =100;
break;
case2:
cell.contentLb.text =@"登录手机号";
cell.titileTF.text =iphoneNumber;
cell.titileTF.tag =200;
break;
case3:
cell.contentLb.text =@"出生日期";
cell.titileTF.text =birthday;
cell.titileTF.tag =300;
break;
case4:
cell.contentLb.text =@"性别";
cell.titileTF.text =gender;
cell.titileTF.tag =400;
break;
case5:
cell.contentLb.text =@"个性签名";
cell.titileTF.text =signature;
cell.titileTF.tag =500;
break;
default:
break;
}
}elseif (indexPath.section ==1 ){
switch (indexPath.row) {
case0:
cell.contentLb.text =@"变更手机号";
cell.titileTF.text =iphoneN;
cell.titileTF.tag =700;
break;
case1:
cell.contentLb.text =@"设置支付密码";
cell.titileTF.text =password;
cell.titileTF.tag =800;
break;
default:
break;
}
}else
{
cell.accessoryType =UITableViewCellAccessoryNone;
UIButton *exitBtn = [[UIButtonalloc]initWithFrame:CGRectMake(30,10,kMainScreenWidth-60,40)];
[exitBtn setTitle:@"退出"forState:UIControlStateNormal];
exitBtn.backgroundColor = [UIColorgreenColor];
[exitBtn addTarget:selfaction:@selector(exit)forControlEvents:UIControlEventTouchUpInside];
[cell.contentViewaddSubview:exitBtn];
return cell;
}
cell.titileTF.delegate =self;
return cell;
}
//当用户选择某一行时
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section ==0 &&indexPath.row ==0) {
//创建一个对话框对象
UIAlertController *alert =[UIAlertControlleralertControllerWithTitle:nilmessage:nilpreferredStyle:UIAlertControllerStyleActionSheet];
//创建按钮
UIAlertAction *ok = [UIAlertActionactionWithTitle:@"拍照或照片图库"style:UIAlertActionStyleDefaulthandler:^(UIAlertAction *_Nonnull action) {
TZImagePickerController *imagePC = [[TZImagePickerControlleralloc]initWithMaxImagesCount:1delegate:self];
[imagePC setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets,BOOL isSelectOriginalPhoto) {
iconImage = photos[0];
[tableView reloadData];
}];
[selfpresentViewController:imagePCanimated:YEScompletion:nil];
}];
//创建取消按钮
UIAlertAction *cancle = [UIAlertActionactionWithTitle:@"取消"style:UIAlertActionStyleCancelhandler:nil];
//把这两个按钮添加到提示框中
[alert addAction:ok];
[alert addAction:cancle];
//弹出提示框
[selfpresentViewController:alertanimated:YEScompletion:nil];
}
}
#pragma mark TZImagePickerControllerDelegate
// 用户点击了取消
- (void)imagePickerControllerDidCancel:(TZImagePickerController *)picker {
}
// 用户选择好了图片,如果assets非空,则用户选择了原图。
- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingPhotos:(NSArray *)photos sourceAssets:(NSArray *)assets isSelectOriginalPhoto:(BOOL)isSelectOriginalPhoto {
}
// 用户选择好了视频
- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingVideo:(UIImage *)coverImage sourceAssets:(id)asset {
}
#pragma mark - textFieldDelegate
- (void)textFieldDidBeginEditing:(UITextField *)textField{
if (textField.tag ==100) {
// textField =nickNameTextFd;
}elseif (textField.tag ==300){
//出生日期
UIDatePicker *datePicker=[[UIDatePickeralloc]initWithFrame:CGRectMake(0,kMainScreenHeight-400,0,0)];
_datePicker = datePicker;
// 只显示时间
datePicker. datePickerMode =UIDatePickerModeDate ;
// 显示中文
datePicker. locale = [NSLocalelocaleWithLocaleIdentifier :@"zh" ];
// 设置弹出日期视图
textField.inputView = datePicker;
// 监听值得改变
[datePicker addTarget:selfaction:@selector(datePickerValueChanged:)forControlEvents:UIControlEventValueChanged];
}elseif (textField.tag ==400) {
//性别
UIPickerView *pickerView = [[UIPickerViewalloc]initWithFrame:CGRectMake(0,kMainScreenHeight-400,0,0)];
pickerView.delegate =self;
pickerView.dataSource =self;
pickerView.showsSelectionIndicator =YES;
pickerView.tag =100;
//设置弹出视图(不弹键盘弹图片)
textField.inputView = pickerView;
//获取plist文件路径,两种方式
NSArray *dataArray = [[NSArrayalloc]initWithObjects:@"男",@"女",nil];
pickerData = dataArray;
}
}
#pragma mark - datePicker
- ( void )datePickerValueChanged:(UIDatePicker *)datePicker
{
NSDateFormatter *formatter = [[NSDateFormatteralloc ]init ];
// 格式化日期格式
formatter. dateFormat =@"yyyy-MM-dd" ;
NSString *date = [formatterstringFromDate :datePicker.date ];
// 显示时间
birthday = date;
[tableViewreloadData];//刷新表格
}
#pragma mark - PickerView
//列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
if (pickerView.tag ==300) {
return3;
}else{
return1;
}
}
//行数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return [pickerDatacount];
}
//返回当前行的内容,此处是将数组中数值添加到滚动的那个显示栏上
- (nullableNSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
return [pickerDataobjectAtIndex:row];
}
//选择行事件,监听轮子的移动
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if (pickerView.tag ==100) {
//性别
NSInteger row =[pickerViewselectedRowInComponent:0];
NSString *selected = [pickerDataobjectAtIndex:row];
gender =selected;
}
[tableViewreloadData];//刷新表格
}
//设置section底部的高度
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
if (section ==2) {
return100;
}
return0;
}
//设置section头部的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return10;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section ==0 &&indexPath.row == 0) {
return70;
}
return44;
}
- iOS综合练习 哈欠阅读
- 综合练习
- 综合练习
- 综合练习:打字练习
- 综合练习:打字练习
- iOS工程师综合练习卷/ iOS工程师能力评估/搜狗2015 iOS工程师笔试题
- C语言综合练习
- 综合练习:简单日历
- 综合练习:宋词排列
- 综合练习:唐诗排列
- 综合练习:唐诗排列
- 综合练习:宋词排列
- 综合练习:简单日历
- Jquery 综合练习
- Js_数据类型综合练习
- WinForm基础:综合练习
- dom的综合练习
- day03综合练习
- 浅谈C/C++ 开发Excel插件之任务窗格
- Paraview 软件学习
- mysql时间字段值0000-00-00 00:00:00
- RF+AppiumLibrary移动端(android)自动化测试案例1:微信添加好友
- FreeMarker基本知识理论
- iOS综合练习 哈欠阅读
- 源码安装lnmp redis jenkins memcached
- 类和对象
- poj2478 Farey Sequence
- Unity导出iOS真机测试教程
- unity ugui 整体设计分析
- 【weak win】 Codeforces Round #176 (Div. 2)
- svn 自动同步到web站点目录post-commit.bat
- ZZULIOJ-【1405: Red and Black】