zoukankan      html  css  js  c++  java
  • UICollectionView自定义布局( 封面布局)

    UICollectionView自定义布局 封面布局


    布局文件:

    MKCoverFlowLayout.h

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

    MKCoverFlowLayout.m

    #import "MKCoverFlowLayout.h"
    @implementation MKCoverFlowLayout
    #define ZOOM_FACTOR 0.35
    
    -(void) prepareLayout {
    
    //水平滚动
      self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
      CGSize size = self.collectionView.frame.size;
      self.itemSize = CGSizeMake(size.width/4.0f, size.height*0.7);
      self.sectionInset = UIEdgeInsetsMake(size.height * 0.15, size.height * 0.1, size.height * 0.15, size.height * 0.1);
    }
    
    - (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)oldBounds
    {
    	return YES;
    }
    
    -(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect
    {
    NSArray* array = [super layoutAttributesForElementsInRect:rect];
    CGRect visibleRect;
    visibleRect.origin = self.collectionView.contentOffset;
    visibleRect.size = self.collectionView.bounds.size;
    float collectionViewHalfFrame = self.collectionView.frame.size.width/2.0f;
    for (UICollectionViewLayoutAttributes* attributes in array) {
    
      if (CGRectIntersectsRect(attributes.frame, rect)) {
          
      CGFloat distance = CGRectGetMidX(visibleRect) - attributes.center.x;
      CGFloat normalizedDistance = distance / collectionViewHalfFrame;
      if (ABS(distance) < collectionViewHalfFrame) {
        CGFloat zoom = 1 + ZOOM_FACTOR*(1 - ABS(normalizedDistance));
        
        //3D变化
        //旋转的角度随着离中心的距离而按比例增加
          //如果物件在中间,其旋转角度为0
          //角度随着离中心的距离二而比例增加
        CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
        rotationAndPerspectiveTransform.m34 = 1.0 / -500;
        rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, (normalizedDistance) * M_PI_4, 0.0f, 1.0f, 0.0f);
        CATransform3D zoomTransform = CATransform3DMakeScale(zoom, zoom, 1.0);
        attributes.transform3D = CATransform3DConcat(zoomTransform, rotationAndPerspectiveTransform);
          
        attributes.zIndex = ABS(normalizedDistance) * 10.0f;
        CGFloat alpha = (1 - ABS(normalizedDistance)) + 0.1;
        if(alpha > 1.0f) alpha = 1.0f;
        attributes.alpha = alpha;
      } else {
        
        attributes.alpha = 0.0f;
      }
    }
    }
    return array;
    }
    
    
    @end
  • 相关阅读:
    Windows远程桌面连接CentOS 7
    CentOS7 系统菜单中添加快捷方式
    CentOS 7 创建桌面快捷方式
    Centos7 可执行程序自定义为系统服务
    CentOS 7 中 Docker 的安装
    CentOS 7 需要安装的常用工具,及centos安装fcitx 搜狗输入法的坑旅
    C++中结构体与类的区别 2
    C++中结构体与类的区别 1
    C++ 11 自旋锁
    Imply.io单机安装
  • 原文地址:https://www.cnblogs.com/sunyanyan/p/5283144.html
Copyright © 2011-2022 走看看