首页 > 代码库 > 山寨“饿了么”应用中添加菜品数量按钮效果
山寨“饿了么”应用中添加菜品数量按钮效果
山寨“饿了么”应用中添加菜品数量按钮效果
本人视频教程系类 iOS中CALayer的使用
最终效果:
山寨源头:
源码:(此源码解决了重用问题,可以放心的放在cell中使用)
AddAndDeleteButton.h 与 AddAndDeleteButton.m
//// AddAndDeleteButton.h// LabelControll//// Created by YouXianMing on 14/12/11.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import <UIKit/UIKit.h>typedef enum : NSUInteger { CNY, // 人民币 GBP, // 英镑 JPY, // 日元 USD, // 美元} EnumMoneyType;@protocol AddAndDeleteButtonDelegate <NSObject>@optional- (void)currentCount:(NSNumber *)count;@end@interface AddAndDeleteButton : UIView@property (nonatomic, weak) id<AddAndDeleteButtonDelegate> delegate;/** * 数目(数目为0就会隐藏) */@property (nonatomic, strong) NSNumber *count;/** * 单价(商品单价) */@property (nonatomic, strong) NSNumber *price;/** * 设置数目 * * @param count 数目 * @param animted 时候执行动画 */- (void)setCount:(NSNumber *)count animated:(BOOL)animted;/** * 起始值 * * @param count 值 */- (void)startValue:(NSNumber *)count;@end
//// AddAndDeleteButton.m// LabelControll//// Created by YouXianMing on 14/12/11.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "AddAndDeleteButton.h"typedef enum : NSUInteger { UIBUTTON_ADD = 10, UIBUTTON_DELETE,} EnumAddAndDeleteButton;// 控件总体的宽度static CGFloat width = 150;// 控件总体的高度static CGFloat height = 28;// 添加按钮的宽度static CGFloat addButtonWidth = 60;// 控件之间的间隙static CGFloat gap = 7;static CGFloat label_10_99 = 5;static CGFloat label_100_999 = 10;// 隐藏位置的frame值(后面要用)static CGRect hidenRect; // 0static CGRect labelRect; // 1 - 9static CGRect deleteRect; // 1 - 9static CGRect labelRect_10_99; // 10 - 99static CGRect deleteRect_10_99; // 10 - 99static CGRect labelRect_100_999; // 100 - 999static CGRect deleteRect_100_999; // 100 - 999@interface AddAndDeleteButton ()@property (nonatomic, strong) UIView *backedView;@property (nonatomic, strong) UIButton *addButton; // 添加的按钮@property (nonatomic, strong) UILabel *countLabel; // 计数的标签@property (nonatomic, strong) UIButton *deleteButton; // 删除的按钮@end@implementation AddAndDeleteButton+ (void)initialize { if (self == [AddAndDeleteButton class]) { // 0时候的frame值 hidenRect = CGRectMake(width - height, 0, height, height); // 1到9的frame值 labelRect = CGRectMake(width - addButtonWidth - gap - height, 0, height, height); deleteRect = CGRectMake(width - addButtonWidth - (gap + height)*2, 0, height, height); // 10到99的frame值 labelRect_10_99 = CGRectMake(width - addButtonWidth - gap - (height + label_10_99), 0, height + label_10_99, height); deleteRect_10_99 = CGRectMake(width - addButtonWidth - (gap + height) - (gap + height + label_10_99), 0, height, height); // 100到999的frame值 labelRect_100_999 = CGRectMake(width - addButtonWidth - gap - (height + label_100_999), 0, height + label_100_999, height); deleteRect_100_999 = CGRectMake(width - addButtonWidth - (gap + height) - (gap + height + label_100_999), 0, height, height); }}- (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { // 添加背景图层 _backedView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)]; [self addSubview:_backedView]; // 计数的标签 _countLabel = [[UILabel alloc] initWithFrame:CGRectMake(width - addButtonWidth - gap - height, 0, height, height)]; _countLabel.backgroundColor = [UIColor whiteColor]; _countLabel.layer.backgroundColor = [UIColor whiteColor].CGColor; _countLabel.layer.borderWidth = 1.f; _countLabel.layer.cornerRadius = 4.f; _countLabel.layer.masksToBounds = YES; _countLabel.layer.borderColor = [UIColor colorWithRed:0.898 green:0.898 blue:0.902 alpha:1].CGColor; _countLabel.text = @"0"; _countLabel.textAlignment = NSTextAlignmentCenter; _countLabel.textColor = [UIColor colorWithRed:0.945 green:0.102 blue:0.325 alpha:1]; [self addSubview:_countLabel]; // 删除按钮 _deleteButton = [[UIButton alloc] initWithFrame:CGRectMake(width - addButtonWidth - (gap + height)*2, 0, height, height)]; _deleteButton.backgroundColor = [UIColor colorWithRed:0.792 green:0.796 blue:0.800 alpha:1]; _deleteButton.tag = UIBUTTON_DELETE; [_deleteButton addTarget:self action:@selector(buttonsEvent:) forControlEvents:UIControlEventTouchUpInside]; _deleteButton.layer.cornerRadius = 4.f; _deleteButton.layer.masksToBounds = YES; [self addSubview:_deleteButton]; // 添加按钮 _addButton = [[UIButton alloc] initWithFrame:CGRectMake(width - addButtonWidth, 0, addButtonWidth, height)]; [_addButton setTitle:@"$10.00" forState:UIControlStateNormal]; [_addButton addTarget:self action:@selector(buttonsEvent:) forControlEvents:UIControlEventTouchUpInside]; _addButton.tag = UIBUTTON_ADD; [_addButton setTitleColor:[UIColor colorWithRed:0.957 green:0.984 blue:0.949 alpha:1] forState:UIControlStateNormal]; _addButton.titleLabel.font = [UIFont systemFontOfSize:16.f]; _addButton.layer.cornerRadius = 4.f; _addButton.backgroundColor = [UIColor colorWithRed:0.475 green:0.796 blue:0.329 alpha:1]; [self addSubview:_addButton]; } return self;}- (void)buttonsEvent:(UIButton *)button { if (button.tag == UIBUTTON_ADD) { [self setCount:@(self.count.intValue + 1) animated:YES]; } else if (button.tag == UIBUTTON_DELETE) { [self setCount:@(self.count.intValue - 1) animated:YES]; } if (_delegate && [_delegate respondsToSelector:@selector(currentCount:)]) { [_delegate currentCount:self.count]; }}- (void)startValue:(NSNumber *)count { if (count.integerValue =http://www.mamicode.com/= 0) { self.count = count; _countLabel.frame = hidenRect; _countLabel.alpha = 0.f; _countLabel.text = @"0"; _deleteButton.frame = hidenRect; _deleteButton.alpha = 0.f; return; } if (count.integerValue >= 1 && count.integerValue <= 9) { self.count = count; _countLabel.frame = labelRect; _countLabel.alpha = 1.f; _countLabel.text = count.stringValue; _deleteButton.frame = deleteRect; _deleteButton.alpha = 1.f; return; } if (count.integerValue >= 10 && count.integerValue <= 99) { self.count = count; _countLabel.frame = labelRect_10_99; _countLabel.alpha = 1.f; _countLabel.text = count.stringValue; _deleteButton.frame = deleteRect_10_99; _deleteButton.alpha = 1.f; return; } if (count.integerValue >= 100 && count.integerValue <= 999) { self.count = count; _countLabel.frame = labelRect_100_999; _countLabel.alpha = 1.f; _countLabel.text = count.stringValue; _deleteButton.frame = deleteRect_100_999; _deleteButton.alpha = 1.f; return; }}- (void)setCount:(NSNumber *)count animated:(BOOL)animted { if (count.intValue =http://www.mamicode.com/= 1000) { return; } _count = count; // 设置数为0而且标签上的值为1时(从1减到0的情况) 1 --> 0 if (count.intValue =http://www.mamicode.com/= 0 && _countLabel.text.intValue =http://www.mamicode.com/= 1) { if (animted) { [UIView animateWithDuration:0.35f animations:^{ _countLabel.frame = hidenRect; _countLabel.alpha = 0.f; _countLabel.text = @"0"; _deleteButton.frame = hidenRect; _deleteButton.alpha = 0.f; }]; } else { _countLabel.frame = hidenRect; _countLabel.alpha = 0.f; _countLabel.text = @"0"; _deleteButton.frame = hidenRect; _deleteButton.alpha = 0.f; } return; } // 设置数目为1而且标签上的值为0时(从0加到1的情况) 0 --> 1 if (count.intValue =http://www.mamicode.com/= 1 && _countLabel.text.intValue =http://www.mamicode.com/= 0) { if (animted) { [UIView animateWithDuration:0.35f animations:^{ _countLabel.frame = labelRect; _countLabel.alpha = 1.f; _countLabel.text = @"1"; _deleteButton.frame = deleteRect; _deleteButton.alpha = 1.f; }]; } else { _countLabel.frame = labelRect; _countLabel.alpha = 1.f; _countLabel.text = @"1"; _deleteButton.frame = deleteRect; _deleteButton.alpha = 1.f; } return; } // 设置数目从9到10时候的动画 9 --> 10 if (count.intValue =http://www.mamicode.com/= 10 && _countLabel.text.intValue =http://www.mamicode.com/= 9) { if (animted) { [UIView animateWithDuration:0.35f animations:^{ _countLabel.frame = labelRect_10_99; _countLabel.alpha = 1.f; _countLabel.text = @"10"; _deleteButton.frame = deleteRect_10_99; _deleteButton.alpha = 1.f; }]; } else { _countLabel.frame = labelRect_10_99; _countLabel.alpha = 1.f; _countLabel.text = @"10"; _deleteButton.frame = deleteRect_10_99; _deleteButton.alpha = 1.f; } return; } // 设置数目从9到10时候的动画 10 --> 9 if (count.intValue =http://www.mamicode.com/= 9 && _countLabel.text.intValue =http://www.mamicode.com/= 10) { if (animted) { [UIView animateWithDuration:0.35f animations:^{ _countLabel.frame = labelRect; _countLabel.alpha = 1.f; _countLabel.text = @"9"; _deleteButton.frame = deleteRect; _deleteButton.alpha = 1.f; }]; } else { _countLabel.frame = labelRect; _countLabel.alpha = 1.f; _countLabel.text = @"9"; _deleteButton.frame = deleteRect; _deleteButton.alpha = 1.f; } return; } // 99 --> 100 if (count.intValue =http://www.mamicode.com/= 100 && _countLabel.text.intValue =http://www.mamicode.com/= 99) { if (animted) { [UIView animateWithDuration:0.35f animations:^{ _countLabel.frame = labelRect_100_999; _countLabel.alpha = 1.f; _countLabel.text = @"100"; _deleteButton.frame = deleteRect_100_999; _deleteButton.alpha = 1.f; }]; } else { _countLabel.frame = labelRect_100_999; _countLabel.alpha = 1.f; _countLabel.text = @"100"; _deleteButton.frame = deleteRect_100_999; _deleteButton.alpha = 1.f; } return; } // 100 --> 99 if (count.intValue =http://www.mamicode.com/= 99 && _countLabel.text.intValue =http://www.mamicode.com/= 100) { if (animted) { [UIView animateWithDuration:0.35f animations:^{ _countLabel.frame = labelRect_10_99; _countLabel.alpha = 1.f; _countLabel.text = @"99"; _deleteButton.frame = deleteRect_10_99; _deleteButton.alpha = 1.f; }]; } else { _countLabel.frame = labelRect_10_99; _countLabel.alpha = 1.f; _countLabel.text = @"99"; _deleteButton.frame = deleteRect_10_99; _deleteButton.alpha = 1.f; } return; } // 11 - 98 if (count.intValue >= 10 && count.intValue <= 99) { _countLabel.frame = labelRect_10_99; _countLabel.text = count.stringValue; _deleteButton.frame = deleteRect_10_99; return; } // 2 --> 8 if (count.intValue >= 1 && count.intValue <= 9) { _countLabel.frame = labelRect; _countLabel.text = count.stringValue; _deleteButton.frame = deleteRect; return; } if (count.intValue >= 100 && count.intValue <= 999) { _countLabel.frame = labelRect_100_999; _countLabel.text = count.stringValue; _deleteButton.frame = deleteRect_100_999; return; }}@end
使用源码:
AddAndDeleteButton *button = [[AddAndDeleteButton alloc] initWithFrame:CGRectMake(100, 0, 150, 28)]; [button startValue:@(0)]; button.transform = CGAffineTransformScale(button.transform, 1.5, 1.5); button.center = self.view.center; [self.view addSubview:button];
控制器源码:
//// ViewController.m// LabelControll//// Created by YouXianMing on 14/12/11.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "ViewController.h"#import "AddAndDeleteButton.h"#import "YXCell.h"static NSString *test = @"YouXianMing";@interface ViewController ()<UITableViewDataSource, UITableViewDelegate, YXCellDelegate>@property (nonatomic, strong) UITableView *tableView;@property (nonatomic, strong) NSMutableArray *dataArray;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; _dataArray = [[NSMutableArray alloc] init]; for (int i = 0; i < 20; i++) { [_dataArray addObject:@(i)]; } _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; _tableView.delegate = self; _tableView.dataSource = self; [self.view addSubview:_tableView]; [_tableView registerClass:[YXCell class] forCellReuseIdentifier:test];}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 20;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { YXCell *cell = [tableView dequeueReusableCellWithIdentifier:test]; cell.selectionStyle = UITableViewCellSelectionStyleNone; cell.delegate = self; [cell.button startValue:_dataArray[indexPath.row]]; return cell;}- (void)currentCount:(NSNumber *)count cell:(YXCell *)cell { NSIndexPath *path = [_tableView indexPathForCell:cell]; [_dataArray replaceObjectAtIndex:path.row withObject:count];}@end
//// YXCell.h// LabelControll//// Created by YouXianMing on 14/12/11.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import <UIKit/UIKit.h>#import "AddAndDeleteButton.h"@class YXCell;@protocol YXCellDelegate <NSObject>@optional- (void)currentCount:(NSNumber *)count cell:(YXCell *)cell;@end@interface YXCell : UITableViewCell@property (nonatomic, weak) id<YXCellDelegate> delegate;@property (nonatomic, strong) AddAndDeleteButton *button;@end
//// YXCell.m// LabelControll//// Created by YouXianMing on 14/12/11.// Copyright (c) 2014年 YouXianMing. All rights reserved.//#import "YXCell.h"@interface YXCell ()<AddAndDeleteButtonDelegate>@end@implementation YXCell- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { _button = [[AddAndDeleteButton alloc] initWithFrame:CGRectMake(100, 0, 150, 28)]; _button.delegate = self; [_button startValue:@(0)]; [self addSubview:_button]; } return self;}- (void)currentCount:(NSNumber *)count { if (_delegate && [_delegate respondsToSelector:@selector(currentCount:cell:)]) { [_delegate currentCount:count cell:self]; }}@end
山寨“饿了么”应用中添加菜品数量按钮效果
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。