前言
前幾天在群里看見(jiàn)一個(gè)朋友說(shuō)這種平鋪菜單用哪個(gè)控件寫(xiě)比較好卫漫,有的人說(shuō)用UICollectionView,有的說(shuō)用UIButton自己計(jì)算。我今天上午正好暫時(shí)沒(méi)接口凌蔬。寫(xiě)了一下,最后還是感覺(jué)用UIButton比較好用,沒(méi)有必要用UICollectionView浸锨。寫(xiě)個(gè)Demo,大家如果需要這個(gè)思路可以看一下。
正文
最重要的一個(gè)方法就是怎么讓菜單按鈕顯示正常:
/** *? 數(shù)據(jù)顯示 */- (void)loadData:(UIView *)bgView whatArray:(NSMutableArray *)array{? __block CGFloat weakX = local;?
?__block CGFloat weakY = local;
? ? for(int i = 0;i < array.count;i++)?
?? {? ? ? ?
?[UIView animateWithDuration:0.2 delay:0.1 usingSpringWithDamping:0.5 initialSpringVelocity:0.1 options:UIViewAnimationOptionBeginFromCurrentState animations:^{? ? ? ? ? ??
//創(chuàng)建按鈕? ? ? ? ? ??
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];? ? ? ? ? ?
?btn.tag = i+1;? ? ? ? ? ??
//判斷是否是選中的數(shù)組? ? ? ? ? ?
?BOOL isS = NO;? ? ? ? ? ?
?if (array.count == self.sMenuArray.count) {? ? ?
?? ? ? ? ? isS = YES;? ? ? ? ? ? ? ?
?for(int i=0; i= self.view.frame.size.width - locaX) {
weakX = locaX;
weakY +=btnH + 5;
}
btn.frame = CGRectMake(weakX, weakY, btnW, btnH);
//判斷下一次xy位置
weakX += btnW + locaX;
if (weakX >= self.view.frame.size.width - locaX) {
weakX = locaX;
weakY += btnH + 5;
}
[bgView addSubview:btn];
btn.layer.cornerRadius = btn.frame.size.width /10;
btn.layer.masksToBounds = YES;
btn.layer.borderWidth = 1;
btn.layer.borderColor = [UIColor colorWithWhite:0.000 alpha:0.105].CGColor;
} completion:^(BOOL finished) {
}];
}
}
知道了如何顯示菜單按鈕之后版姑,其他的就簡(jiǎn)單了柱搜。點(diǎn)擊菜單按鈕把它移動(dòng)到常用菜單處:
/**
*? 按鈕事件
*
*? @param sender <#sender description#>
*/
- (void)doSomething:(UIButton *)sender
{
//判斷按鈕處于哪個(gè)區(qū)域
if (sender.tag<100) {
// 從menuarray取出這個(gè)數(shù)據(jù)放到smenuarray里面
NSInteger index = sender.tag - 1;
[self.sMenuArray addObject:self.menuArray[index]];
[self.menuArray removeObjectAtIndex:index];
}else
{
// 從smenuarray取出這個(gè)數(shù)據(jù)放到smenuarray里面
NSInteger index = sender.tag - 1 - 100;
[self.menuArray addObject:self.sMenuArray[index]];
[self.sMenuArray removeObjectAtIndex:index];
}
//數(shù)據(jù)重新加載,把上一次數(shù)據(jù)顯示去除
for(UIView *view in [self.dataView subviews])
{
[view removeFromSuperview];
}
for (UIView *view in [self.selectedView subviews]) {
[view removeFromSuperview];
}
[self loadData:self.dataView whatArray:self.menuArray];
[self loadData:self.selectedView whatArray:self.sMenuArray];
}
在代碼里我已經(jīng)把每一步操作說(shuō)的很清楚了,大家如果感興趣可以去下載運(yùn)行一下剥险。 運(yùn)行截圖:
結(jié)語(yǔ)
我是程序員聪蘸,我為自己代言