UICollectionViewCell水平缩放,中间大两边小效果的实现
来源:互联网 发布:新塘网络教育 编辑:程序博客网 时间:2024/04/27 04:33
//
// CollectionViewFlowLayout.h
// HorizontalScale
//
// Created by zmx on 16/3/15.
// Copyright © 2016年 zmx. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface CollectionViewFlowLayout : UICollectionViewFlowLayout
@end
//
// CollectionViewFlowLayout.m
// HorizontalScale
//
// Created by zmx on 16/3/15.
// Copyright © 2016年 zmx. All rights reserved.
//
#import "CollectionViewFlowLayout.h"
@implementation CollectionViewFlowLayout
- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {
NSArray *attrs = [selfdeepCopyWithArray:[superlayoutAttributesForElementsInRect:rect]];
CGFloat contentOffsetX =self.collectionView.contentOffset.x;
CGFloat collectionViewCenterX = self.collectionView.frame.size.width *0.5;
for (UICollectionViewLayoutAttributes *attrin attrs) {
CGFloat scale = 1 - fabs(attr.center.x - contentOffsetX - collectionViewCenterX) /self.collectionView.bounds.size.width;
attr.transform = CGAffineTransformMakeScale(scale, scale);
}
return attrs;
}
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds {
return YES;
}
// 每次都有图片居中
- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity {
CGRect rect = CGRectMake(proposedContentOffset.x,0, self.collectionView.bounds.size.width,self.collectionView.bounds.size.height);
NSArray *attrs = [superlayoutAttributesForElementsInRect:rect];
CGFloat contentOffsetX =self.collectionView.contentOffset.x;
CGFloat collectionViewCenterX = self.collectionView.frame.size.width *0.5;
CGFloat minDistance = MAXFLOAT;
for (UICollectionViewLayoutAttributes *attrin attrs) {
CGFloat distance = attr.center.x - contentOffsetX - collectionViewCenterX;
if (fabs(distance) <fabs(minDistance)) {
minDistance = distance;
}
}
proposedContentOffset.x += minDistance;
return proposedContentOffset;
}
// UICollectionViewFlowLayout has cached frame mismatch for index path这个警告来源主要是在使用layoutAttributesForElementsInRect:方法返回的数组时,没有使用该数组的拷贝对象,而是直接使用了该数组。解决办法对该数组进行拷贝,并且是深拷贝。
- (NSArray *)deepCopyWithArray:(NSArray *)arr {
NSMutableArray *arrM = [NSMutableArrayarray];
for (UICollectionViewLayoutAttributes *attrin arr) {
[arrM addObject:[attr copy]];
}
return arrM;
}
@end
//
// ViewController.m
// HorizontalScale
//
// Created by zmx on 16/3/15.
// Copyright © 2016年 zmx. All rights reserved.
//
#import "ViewController.h"
#import "CollectionViewFlowLayout.h"
#import "Cell.h"
static NSString *identifier =@"c";
@interface ViewController () <UICollectionViewDataSource,UICollectionViewDelegate>
@property (weak, nonatomic) IBOutletUICollectionView *collectionView;
@property (weak, nonatomic) IBOutletCollectionViewFlowLayout *layout;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self.collectionViewregisterNib:[UINibnibWithNibName:@"Cell"bundle:nil]forCellWithReuseIdentifier:identifier];
}
- (void)viewDidLayoutSubviews {
[superviewDidLayoutSubviews];
self.layout.itemSize =CGSizeMake(100,100);
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return 20;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
Cell *cell = [collectionViewdequeueReusableCellWithReuseIdentifier:identifierforIndexPath:indexPath];
return cell;
}
@end
- UICollectionViewCell水平缩放,中间大两边小效果的实现
- ViewPager中间大两边小效果的实现
- 用gallery展示图片,实现中间图片稍大,两边较小的效果
- ViewPager 实现 Galler 效果, 中间大图显示,两边小图展示
- ViewPager 实现 Galler 效果, 中间大图显示,两边小图展示(优化篇)
- ViewPager实现Gallery的画廊效果 突显中间 虚化两边的界面
- 实现一个EditText中间有字,字两边都可点击触发事件的效果
- Android 实现 按钮从两边移到中间动画效果
- RecycleView实现Gallery画廊效果,中间放大两边缩小
- CSS伪类实现中间文字两边横线效果
- 做一个从中心向两边水平扩展的动画效果
- 如何实现两边固定,中间自适应的三栏布局?
- 中间文字,两边横线(纯css实现的哦)
- 用伪类实现 两边横线、中间标题的样式
- FancyCoverFlow——一个页面显示多张图片,中间大,两边小
- Android实现按钮从两边移到中间动画效果(网上整理)
- css实现两边固定,中间自适应
- android htc 专辑 gallery 效果 (中间大两头小)
- 14.安全加固
- Struts学习笔记(三)Ajax +json+JQuery的综合使用
- TCP的流量控制
- VisualSVN Server的安装和使用
- 十四步实现拥有强大AI的五子棋游戏
- UICollectionViewCell水平缩放,中间大两边小效果的实现
- 15.LSB
- shell之调试&分析
- 线程本地存储(TLS)的学习
- 常见面试之机器学习算法思想简单梳理
- Zookeeper原理及应用
- 3月第二周(3.8~3.14)总结
- java Class getDeclaredFields() 与getFields()的区别
- Android WebView的简单实用