国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

2019-10-21 18:55:27
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下
 

以前瀑布流的時候使用過UICollectionView,但是那時使用的是系統自帶的UICollectionViewFlowLayout布局,今天看文章,看到UICollectionViewFlowLayout自定義相關的東西,于是動手寫了一個簡單圖片瀏覽的demo,熟練一些UICollectionViewFlowLayout自定義布局。

#import <UIKit/UIKit.h>@interface JWCollectionViewFlowLayout : UICollectionViewFlowLayout@end

自定義UICollectionViewFlowLayout,首先繼承UICollectionViewFlowLayout,實現一下幾個方法

#define screenWidth [UIScreen mainScreen].bounds.size.width#define MaxChangeRange 100#import "JWCollectionViewFlowLayout.h"@implementation JWCollectionViewFlowLayout-(void)prepareLayout{ self.scrollDirection = UICollectionViewScrollDirectionHorizontal; self.itemSize = CGSizeMake(300, 500);}- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{ return YES;}- (nullable NSArray<__kindof UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect{ NSArray *array = [super layoutAttributesForElementsInRect:rect]; CGRect visibleRect = CGRectMake(self.collectionView.contentOffset.x, 0, self.collectionView.bounds.size.width, self.collectionView.bounds.size.height); for (UICollectionViewLayoutAttributes *attr in array) {  if (CGRectIntersectsRect(attr.frame, rect)) {   BOOL isAtRight = YES;   CGFloat distance = (attr.center.x - CGRectGetMidX(visibleRect));   if (distance<0) {    distance = -distance;    isAtRight = NO;   }   CGFloat precent ;   if (distance < 180)   {    precent = 1.0;   }   else   {    precent = ((screenWidth / 2) - distance) / (screenWidth / 2);   }   CATransform3D transform = CATransform3DIdentity;   transform.m34 = 1.0 / 600;   if (precent < 0.5) {    precent = 0.5;   }   transform = CATransform3DScale(transform, 1, precent, 1);   CGFloat p = isAtRight?M_PI_4:-M_PI_4;   transform = CATransform3DRotate(transform, p * (1 - precent), 0, 1, 0);   attr.transform3D = transform;   attr.zIndex = 1;   attr.alpha = precent;   } } return array;}- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity{ CGFloat offset = MAXFLOAT; CGFloat hCenter = proposedContentOffset.x + (CGRectGetWidth(self.collectionView.bounds) / 2.0); CGRect currentRect = CGRectMake(proposedContentOffset.x, 0, self.collectionView.bounds.size.width, self.collectionView.bounds.size.height); NSArray* array = [super layoutAttributesForElementsInRect:currentRect]; for (UICollectionViewLayoutAttributes* layoutAttributes in array) {  CGFloat itemHorizontalCenter = layoutAttributes.center.x;  if (ABS(itemHorizontalCenter - hCenter) < ABS(offset))  {   offset = itemHorizontalCenter - hCenter;  } } return CGPointMake(proposedContentOffset.x + offset, proposedContentOffset.y);}

使用

-(void)setupUI{ JWCollectionViewFlowLayout *flowLayout = [[JWCollectionViewFlowLayout alloc] init]; UICollectionView *imgBrowseView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:flowLayout]; imgBrowseView.dataSource = self; imgBrowseView.delegate = self; imgBrowseView.backgroundColor = [UIColor whiteColor]; [self.view addSubview:imgBrowseView]; _imgBrowseView = imgBrowseView; [self.imgBrowseView registerNib:[UINib nibWithNibName:@"CustumCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"cell"];}

demo:https://github.com/jiangtaidi/JWImageBrowseDemo.git

運行結果:

iOS,UICollectionViewFlowLayout,圖片瀏覽

以上就是本文的全部內容,希望對大家的學習有所幫助。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吴堡县| 霸州市| 白银市| 安义县| 上饶县| 徐汇区| 九寨沟县| 荣成市| 广水市| 崇文区| 清新县| 柳江县| 辉县市| 台州市| 沈丘县| 福建省| 青冈县| 昭苏县| 蓬安县| 满洲里市| 贵阳市| 沙湾县| 东阿县| 乌鲁木齐县| 仁怀市| 西畴县| 漾濞| 苏尼特右旗| 株洲县| 革吉县| 平泉县| 隆子县| 邹城市| 洛阳市| 荆门市| 勐海县| 古蔺县| 高尔夫| 若羌县| 呼和浩特市| 桑植县|