import
UIKit
/**
*/
class
CustomLayout
:
UICollectionViewLayout
{
// 内容区域总大小,不是可见区域
{
return
CGSizeMake
(collectionView!.bounds.size.width,
CGFloat
(collectionView!.numberOfItemsInSection(0) * 200 / 3 + 200))
}
// 所有单元格位置属性
)
]? {
var
attributesArray = [
]()
let
cellCount =
self
.collectionView!.numberOfItemsInSection(0)
for
i
in
0..<cellCount {
indexPath =
(forItem:i,inSection:0)
attributes =
.layoutAttributesForItemAtIndexPath(indexPath)
attributesArray.append(attributes!)
}
return
attributesArray
}
// 这个方法返回每个单元格的位置和大小
)
? {
//当前单元格布局属性
attribute =
(forCellWithIndexPath:indexPath)
//单元格外部空隙,简单起见,这些常量都在方法内部定义了,没有共享为类成员
//let itemSpacing = 2
lineSpacing = 5
//单元格边长
largeCellSide:
= 200
smallCellSide:
= 100
//内部间隙,左右5
insets =
UIEdgeInsetsMake
(2,5,2,5)
//当前行数,每行显示3个图片,1大2小
line:
Int
= indexPath.item / 3
//当前行的Y坐标
lineOriginY = largeCellSide *
(line) +
(lineSpacing * line)
+ insets.top
//右侧单元格X坐标,这里按左右对齐,所以中间空隙大
rightLargeX = collectionView!.bounds.size.width - largeCellSide - insets.right
rightSmallX = collectionView!.bounds.size.width - smallCellSide - insets.right
// 每行2个图片,2行循环一次,一共6种位置
if
(indexPath.item % 6 == 0) {
attribute.frame =
CGRectMake
(insets.left,lineOriginY,largeCellSide,
largeCellSide)
}
else
(indexPath.item % 6 == 1) {
(rightSmallX,smallCellSide,
smallCellSide)
(indexPath.item % 6 == 2) {
lineOriginY + smallCellSide + insets.top,smallCellSide)
(indexPath.item % 6 == 3) {
smallCellSide )
(indexPath.item % 6 == 4) {
(indexPath.item % 6 == 5) {
(rightLargeX,
largeCellSide)
}
attribute
}
/*
//如果有页眉、页脚或者背景,可以用下面的方法实现更多效果
func layoutAttributesForSupplementaryViewOfKind(elementKind: String!,
atIndexPath indexPath: NSIndexPath!) -> UICollectionViewLayoutAttributes!
func layoutAttributesForDecorationViewOfKind(elementKind: String!,
atIndexPath indexPath: NSIndexPath!) -> UICollectionViewLayoutAttributes!
*/
--- 主页面 ViewController.swift ---
76
ViewController
UIViewController
,
UICollectionViewDelegate
UICollectionViewDataSource
{
collectionView:
UICollectionView
!
//课程名称和图片,每一门课程用字典来表示
courses = [
[
"name"
:
"Swift"
"pic"
"swift.png"
],
"OC"
"oc.jpg"
"Java"
"java.png"
"PHP"
"php.jpeg"
"JS"
"js.jpeg"
"HTML"
"html.jpeg"
"Ruby"
"ruby.png"
]
]
viewDidLoad() {
super
.viewDidLoad()
layout =
()
//let layout = UICollectionViewFlowLayout()
.collectionView =
(
frame:
(0,view.bounds.size.width,view.bounds.height-20),
collectionViewLayout:layout)
.collectionView.delegate =
self
.collectionView.dataSource =
self
// 注册CollectionViewCell
.collectionView.registerClass(
UICollectionViewCell
.
forCellWithReuseIdentifier:
"ViewCell"
)
//默认背景是黑色和label一致
.collectionView.backgroundColor =
UIColor
.whiteColor()
.view.addSubview(collectionView)
}
didReceiveMemoryWarning() {
.didReceiveMemoryWarning()
}
// CollectionView行数
collectionView(collectionView:
numberOfItemsInSection section:
) ->
{
courses.count;
}
// 获取单元格
cellForItemAtIndexPath indexPath:
) ->
{
// storyboard里设计的单元格
identify:
String
=
"ViewCell"
// 获取设计的单元格,不需要再动态添加界面元素
cell =
.collectionView.dequeueReusableCellWithReuseIdentifier(
identify,forIndexPath: indexPath)
as
UICollectionViewCell
// 添加图片
img =
UIImageView
(image:
UIImage
(named: courses[indexPath.item][
]!))
img.frame = cell.bounds
// 图片上面显示课程名称,居中显示
lbl =
UILabel
(frame:
lbl.textAlignment =
NSTextAlignment
.
Center
lbl.text = courses[indexPath.item][
]
cell.addSubview(img)
cell.addSubview(lbl)
cell
}
/* 自定义布局不需要调用
//单元格大小
func collectionView(collectionView: UICollectionView!,
layout collectionViewLayout: UICollectionViewLayout!,0)!important">sizeForItemAtIndexPath indexPath: NSIndexPath!) -> CGSize {
let size:Float = indexPath.item % 3 == 0 ? 200 : 100
return CGSize(width:size,height:size)
}
*/
原文出自:
www.hangge.com
转载请保留原文链接:
http://www.hangge.com/blog/cache/detail_591.html (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|
|