IOS development and ios development tutorial
Model cell
#import <UIKit/UIKit.h>@interface ImageCell : UICollectionViewCell@property (nonatomic, copy) NSString *image;@end
#import "ImageCell.h"@interface ImageCell()@property (weak, nonatomic) IBOutlet UIImageView *imageView;@end@implementation ImageCell- (void)awakeFromNib { self.imageView.layer.borderWidth = 3; self.imageView.layer.borderColor = [UIColor whiteColor].CGColor; self.imageView.layer.cornerRadius = 3; self.imageView.clipsToBounds = YES;}- (void)setImage:(NSString *)image{ _image = [image copy]; self.imageView.image = [UIImage imageNamed:image];}@end
Controller ViewController
# Import "ViewController. h "# import" ImageCell. h "# import" LineLayout. h "@ interface ViewController () <UICollectionViewDataSource, UICollectionViewDelegate> @ property (nonatomic, strong) NSMutableArray * images; @ property (nonatomic, weak) UICollectionView * collectionView; @ end @ implementation ViewControllerstatic NSString * const ID = @ "image";-(NSMutableArray *) images {if (! _ Images) {self. images = [[NSMutableArray alloc] init]; for (int I = 1; I <= 20; I ++) {[self. images addObject: [NSString stringWithFormat: @ "% d", I] ;}return _ images ;}- (void) viewDidLoad {[super viewDidLoad]; CGFloat w = self. view. frame. size. height; CGRect rect = CGRectMake (0, 0, w, 200); UICollectionView * collectionView = [[UICollectionView alloc] initWithFrame: rect collectionViewLayout: [LineLayout alloc] init]; collectionView. dataSource = self; collectionView. delegate = self; [collectionView registerNib: [UINib nibWithNibName: @ "ImageCell" bundle: nil] forCellWithReuseIdentifier: ID]; [self. view addSubview: collectionView]; self. collectionView = collectionView; // collectionViewLayout: // UICollectionViewLayout // UICollectionViewFlowLayout}-(void) touchesBegan :( NSSet *) touches withEvent :( ui* event) event {if ([self. collectionView. collectionViewLayout isKindOfClass: [LineLayout class]) {[self. collectionView setCollectionViewLayout: [[UICollectionViewFlowLayout alloc] init] animated: YES];} else {[self. collectionView setCollectionViewLayout: [[LineLayout alloc] init] animated: YES] ;}# pragma mark-<UICollectionViewDataSource>-(NSInteger) collectionView :( UICollectionView *) collectionView detail :( NSInteger) section {return self. images. count;}-(UICollectionViewCell *) collectionView :( UICollectionView *) collectionView cellForItemAtIndexPath :( NSIndexPath *) indexPath {ImageCell * cell = [collectionView detail: ID forIndexPath: indexPath]; cell. image = self. images [indexPath. item]; return cell;}-(void) collectionView :( UICollectionView *) collectionView didSelectItemAtIndexPath :( NSIndexPath *) indexPath {// Delete model data [self. images removeObjectAtIndex: indexPath. item]; // Delete UI (refresh UI) [collectionView deleteItemsAtIndexPaths: @ [indexPath];} @ end
STACK layout StackLayout
# Define Random0_1 (arc4random_uniform (100)/100.0) # import "StackLayout. h "@ implementation StackLayout-(BOOL) shouldInvalidateLayoutForBoundsChange :( CGRect) newBounds {return YES;} //-(CGSize) collectionViewContentSize // {// return CGSizeMake (500,500 ); //}-(UICollectionViewLayoutAttributes *) layoutAttributesForItemAtIndexPath :( NSIndexPath *) indexPath {NSArray * angles = @ [@ 0, @ (-0.2), @ (-0.5 ), @ (0.2), @ (0.5)]; UICollectionViewLayoutAttributes * attrs = [UICollectionViewLayoutAttributes layoutbutetesforcellwithindexpath: indexPath]; attrs. size = CGSizeMake (100,100); attrs. center = CGPointMake (self. collectionView. frame. size. width * 0.5, self. collectionView. frame. size. height * 0.5); if (indexPath. item> = 5) {attrs. hidden = YES;} else {attrs. transform = CGAffineTransformMakeRotation ([angles [indexPath. item] floatValue]); // The greater the zIndex, the more attrs. zIndex = [self. collectionView numberOfItemsInSection: indexPath. section]-indexPath. item;} return attrs;}-(NSArray *) layoutAttributesForElementsInRect :( CGRect) rect {NSMutableArray * array = [NSMutableArray array]; NSInteger count = [self. collectionView numberOfItemsInSection: 0]; for (int I = 0; I <count; I ++) {UICollectionViewLayoutAttributes * attrs = [self layoutAttributesForItemAtIndexPath: [NSIndexPath indexPathForItem: I inSection: 0]; [array addObject: attrs];} return array;} @ end
Circular layout CircleLayout
# Import "CircleLayout. h "@ implementation CircleLayout-(BOOL) values :( CGRect) newBounds {return YES;}-(UICollectionViewLayoutAttributes *) values :( NSIndexPath *) indexPath {character * attrs = [character keys: indexPath]; attrs. size = CGSizeMake (50, 50); // the radius of the circle CGFloat circleRadius = 70; CGPoint circleCenter = CGPointMake (self. collectionView. frame. size. width * 0.5, self. collectionView. frame. size. height * 0.5); // The angle between each item CGFloat angleDelta = M_PI * 2/[self. collectionView numberOfItemsInSection: indexPath. section]; // calculate the current item angle CGFloat angle = indexPath. item * angleDelta; attrs. center = CGPointMake (circleCenter. x + circleRadius * cosf (angle), circleCenter. y-circleRadius * sinf (angle); attrs. zIndex = indexPath. item; return attrs;}-(NSArray *) layoutAttributesForElementsInRect :( CGRect) rect {NSMutableArray * array = [NSMutableArray array]; NSInteger count = [self. collectionView numberOfItemsInSection: 0]; for (int I = 0; I <count; I ++) {UICollectionViewLayoutAttributes * attrs = [self layoutAttributesForItemAtIndexPath: [NSIndexPath indexPathForItem: I inSection: 0]; [array addObject: attrs];} return array;} @ end
Copyright Disclaimer: This article is an original article by the blogger and cannot be reproduced without the permission of the blogger.