1.关于布局方式
首页本想采用collectionView加瀑布流方式,可是后来由于中间有轮播,要8个section,放弃了这种写法。
那就自定义cell吧,可是每一组cell 都不同,所以反复创建了多种cell。在此期间也出现了一些问题。比如一个cell中有一个大item和4个小Item组成,开始想大的占两个cell高度,剩下的排在大item后面,可是却排在了下面,应该是flowLayout的问题,如果重写,那么每个都要写,又给否定了。
然后想着那就用for-Loop来创建吧,可是给写在setter 方法里面了,导致每次滑动都会创建,使得图册无限叠加,耗费内存。后来写在init方法中避免了叠加。
2.关于cell的item和出现分割线问题
第3个section有8个Item,想着那就用collection的优势来创建吧,却没想到被几条线击碎了。Item之间的线没有出头,那就画吧,可是一会显示,一会不显示,甚是折腾
在自定义CollectionCell的时候,添加一下代码
UIView *view = [[UIView alloc] init];
view.backgroundColor = [UIColor whiteColor];
[self addSubview:view];
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.mas_left);
make.top.mas_equalTo(self.mas_top);
make.right.mas_equalTo(self.mas_right);
make.bottom.mas_equalTo(self.mas_bottom);
}];
剩下的控件添加到view上就可以了
后来即将要上线,索性写了个view上面放了8个imageView和label,还有要求的间隔线。虽然问题解决了,但是仔细想想,好像是完全放弃了collection的优势,有些遗憾。此处还得继续寻找更加合适的方案
3.关于collection刷新指定section或者row的问题
在iOS7 中reloadItemsAtIndexPaths 这个方法竟然会崩溃,找了好多资料,都没有找到解决方法,只能 全部刷新了,看起来没有多大的视觉变化,可是内存会有增加
Talk is cheap,show me the code:
// NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection:2];
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:1 inSection:2];
[UIView performWithoutAnimation:^{//这个animation可以消除刷新的动画
if (IOS_VERSION < 8.0) {
[_collectionView reloadData];
}else{
[_collectionView reloadItemsAtIndexPaths:@[indexPath]];
}
}];
4.那么问题来了
一个cell中有8个imageView,用delegate看来是不行了,只能给每个imageView添加了手势,又导致 -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{}
这个方法没有使用到。
5.关于渐变式导航栏,不想多说,看code吧
-(void)viewWillAppear:(BOOL)animated{
[superviewWillAppear:animated];
if (self.navigationController) {
[self.navigationControllersetNavigationBarHidden:YES animated:animated];
}
}
-(void)viewDidDisappear:(BOOL)animated{
[superviewDidDisappear:animated];
if (self.navigationController) {
[self.navigationControllersetNavigationBarHidden:NOanimated:NO];
}
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (scrollView.contentOffset.y < 0) {
[selfshowView:_naviViewhidden:YES];
[selfsetStatusBarStyle:UIStatusBarStyleDefault];
}else if(scrollView.contentOffset.y > 50) {
[selfshowView:_naviViewhidden:NO];
CGFloat alpha = MIN(1, 1 - ((50 + 64 - scrollView.contentOffset.y) / 64));
[_naviViewsetBackgroundColor:[[UIColorwhiteColor] colorWithAlphaComponent:alpha]];
}else{
[selfshowView:_naviViewhidden:NO];
[_naviViewsetBackgroundColor:[[UIColorwhiteColor] colorWithAlphaComponent:0.0f]];
}
}
-(void)showView:(UIView *)view hidden:(BOOL)hidden{
CATransition *animation = [CATransitionanimation];
animation.type = kCATransitionFade;
animation.duration = 0.4;
[view.layeraddAnimation:animation forKey:nil];
view.hidden = hidden;
}
//根据数组随机生成一个长度为3内容不重复的数组
-(NSArray*)createRandomArray:(NSMutableArray*)mutableArray{
if (mutableArray.count < 4) {
return mutableArray;
}else{
NSMutableArray *startArray = [NSMutableArray array];
NSMutableArray *resultArray=[[NSMutableArray alloc] initWithCapacity:0];
for (NSInteger i = 0; i < mutableArray.count; i++) {
[startArray addObject:[NSString stringWithFormat:@"%ld",i]];
}
for (int i = 0; i<3; i++) {
int t = arc4random()%startArray.count;
resultArray[i] = startArray[t];
startArray[t] = [startArray lastObject];
[startArray removeLastObject];
}
NSInteger i = [resultArray[0] integerValue];
NSInteger j = [resultArray[1] integerValue];
NSInteger k = [resultArray[2] integerValue];
return @[mutableArray[i], mutableArray[j], mutableArray[k]];
}
}
小结:此次虽然完成改版,但是还是有许多可优化更改的地方,仙路漫漫,道友仍需努力!