ios开发——实用技术篇&图片无限滚动和自动滚动
初始化项目
- 1:自定义一个集成自Collection的Cell
.h
1 #import <UIKit/UIKit.h> 2 @class iCocosNews; 3 @interface iCocosNewsCell : UICollectionViewCell 4 @property (nonatomic, strong) iCocosNews *news; 5 @end
.m
1 #import "iCocosNewsCell.h" 2 #import "iCocosNews.h" 3 4 @interface iCocosNewsCell() 5 @property (weak, nonatomic) IBOutlet UILabel *titleLabel; 6 @property (weak, nonatomic) IBOutlet UIImageView *iconView; 7 @end 8 9 @implementation iCocosNewsCell 10 - (void)setNews:(iCocosNews *)news 11 { 12 _news = news; 13 14 self.iconView.image = [UIImage imageNamed:news.icon]; 15 self.titleLabel.text = NSString(@" %@", news.title); 16 } 17 18 @end
- 2:对应要显示的模型数据(只需要实现.h文件)
.h
1 #import <Foundation/Foundation.h> 2 3 @interface iCocosNews : NSObject 4 @property (copy, nonatomic) NSString *title; 5 @property (copy, nonatomic) NSString *icon; 6 @end
一:无限滚动
- :控制器里面直接使用
1 #import "iCocosNewsViewController.h" 2 #import "iCocosNewsCell.h" 3 #import "MJExtension.h" 4 #import "iCocosNews.h" 5 6 #define iCocosCellIdentifier @"news" 7 #define iCocosMaxSections 100 8 9 @interface iCocosNewsViewController () <UICollectionViewDataSource, UICollectionViewDelegate> 10 @property (weak, nonatomic) IBOutlet UICollectionView *collectionView; 11 @property (nonatomic, strong) NSArray *newses; 12 @end 13 14 @implementation iCocosNewsViewController 15 16 //- (NSMutableArray *)newses 17 //{ 18 // if (_newses == nil) { 19 // self.newses = [NSMutableArray array]; 20 // 21 // for (int i = 0; i<200; i++) { 22 // NSArray *array = [iCocosNews objectArrayWithFilename:@"newses.plist"]; 23 // [self.newses addObjectsFromArray:array]; 24 // } 25 // } 26 // return _newses; 27 //} 28 29 - (NSArray *)newses 30 { 31 if (_newses == nil) { 32 self.newses = [iCocosNews objectArrayWithFilename:@"newses.plist"]; 33 } 34 return _newses; 35 } 36 37 - (void)viewDidLoad 38 { 39 [super viewDidLoad]; 40 41 // 注册cell 42 [self.collectionView registerNib:[UINib nibWithNibName:@"iCocosNewsCell" bundle:nil] forCellWithReuseIdentifier:iCocosCellIdentifier]; 43 44 // [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:500 inSection:0] atScrollPosition:UICollectionViewScrollPositionLeft animated:YES]; 45 46 [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:iCocosMaxSections/2] atScrollPosition:UICollectionViewScrollPositionLeft animated:YES]; 47 } 48 49 #pragma mark - UICollectionViewDataSource 50 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 51 { 52 return self.newses.count; 53 } 54 55 - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 56 { 57 return iCocosMaxSections; 58 } 59 60 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 61 { 62 iCocosNewsCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:iCocosCellIdentifier forIndexPath:indexPath]; 63 64 cell.news = self.newses[indexPath.item]; 65 66 return cell; 67 } 68 69 70 @end
:需要使用MJExtension实现模型数据的转换
二:自动滚动
- :控制器里面直接使用
1 #import "iCocosNewsViewController.h" 2 #import "iCocosNewsCell.h" 3 #import "MJExtension.h" 4 #import "iCocosNews.h" 5 6 #define iCocosCellIdentifier @"news" 7 #define iCocosMaxSections 100 8 9 @interface iCocosNewsViewController () <UICollectionViewDataSource, UICollectionViewDelegate> 10 @property (weak, nonatomic) IBOutlet UICollectionView *collectionView; 11 @property (nonatomic, weak) IBOutlet UIPageControl *pageContol; 12 @property (nonatomic, strong) NSArray *newses; 13 @property (nonatomic, strong) NSTimer *timer; 14 @end 15 16 @implementation iCocosNewsViewController 17 18 - (NSArray *)newses 19 { 20 if (_newses == nil) { 21 self.newses = [iCocosNews objectArrayWithFilename:@"newses.plist"]; 22 self.pageContol.numberOfPages = self.newses.count; 23 } 24 return _newses; 25 } 26 27 - (void)viewDidLoad 28 { 29 [super viewDidLoad]; 30 31 // 注册cell 32 [self.collectionView registerNib:[UINib nibWithNibName:@"iCocosNewsCell" bundle:nil] forCellWithReuseIdentifier:iCocosCellIdentifier]; 33 34 // 默认显示最中间的那组 35 [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:iCocosMaxSections/2] atScrollPosition:UICollectionViewScrollPositionLeft animated:NO]; 36 37 // 添加定时器 38 [self addTimer]; 39 } 40 41 /** 42 * 添加定时器 43 */ 44 - (void)addTimer 45 { 46 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES]; 47 [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 48 self.timer = timer; 49 } 50 51 /** 52 * 移除定时器 53 */ 54 - (void)removeTimer 55 { 56 // 停止定时器 57 [self.timer invalidate]; 58 self.timer = nil; 59 } 60 61 - (NSIndexPath *)resetIndexPath 62 { 63 // 当前正在展示的位置 64 NSIndexPath *currentIndexPath = [[self.collectionView indexPathsForVisibleItems] lastObject]; 65 // 马上显示回最中间那组的数据 66 NSIndexPath *currentIndexPathReset = [NSIndexPath indexPathForItem:currentIndexPath.item inSection:iCocosMaxSections/2]; 67 [self.collectionView scrollToItemAtIndexPath:currentIndexPathReset atScrollPosition:UICollectionViewScrollPositionLeft animated:NO]; 68 return currentIndexPathReset; 69 } 70 71 /** 72 * 下一页 73 */ 74 - (void)nextPage 75 { 76 // 1.马上显示回最中间那组的数据 77 NSIndexPath *currentIndexPathReset = [self resetIndexPath]; 78 79 // 2.计算出下一个需要展示的位置 80 NSInteger nextItem = currentIndexPathReset.item + 1; 81 NSInteger nextSection = currentIndexPathReset.section; 82 if (nextItem == self.newses.count) { 83 nextItem = 0; 84 nextSection++; 85 } 86 NSIndexPath *nextIndexPath = [NSIndexPath indexPathForItem:nextItem inSection:nextSection]; 87 88 // 3.通过动画滚动到下一个位置 89 [self.collectionView scrollToItemAtIndexPath:nextIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:YES]; 90 } 91 92 #pragma mark - UICollectionViewDataSource 93 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 94 { 95 return self.newses.count; 96 } 97 98 - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 99 { 100 return iCocosMaxSections; 101 } 102 103 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 104 { 105 iCocosNewsCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:iCocosCellIdentifier forIndexPath:indexPath]; 106 107 cell.news = self.newses[indexPath.item]; 108 109 return cell; 110 } 111 112 #pragma mark - UICollectionViewDelegate 113 /** 114 * 当用户即将开始拖拽的时候就调用 115 */ 116 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 117 { 118 [self removeTimer]; 119 } 120 121 /** 122 * 当用户停止拖拽的时候就调用 123 */ 124 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 125 { 126 // NSLog(@"scrollViewDidEndDragging--松开"); 127 [self addTimer]; 128 } 129 130 - (void)scrollViewDidScroll:(UIScrollView *)scrollView 131 { 132 int page = (int)(scrollView.contentOffset.x / scrollView.bounds.size.width + 0.5) % self.newses.count; 133 self.pageContol.currentPage = page; 134 } 135 @end
最后给大家介绍一种常用的截图方法
1 // 1.开启图形上下文 2 CGSize imageSize = self.view.bounds.size; 3 UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0.0); 4 5 // 2.将某个view的所有内容渲染到图形上下文中 6 CGContextRef context = UIGraphicsGetCurrentContext(); 7 [self.view.layer renderInContext:context]; 8 9 // 3.取得图片 10 UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 11 12 CGImageRef subimageRef = CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0, 0, 640, 480)); 13 UIImage *subImage = [UIImage imageWithCGImage:subimageRef]; 14 [UIImagePNGRepresentation(subImage) writeToFile:@"/Users/apple/Desktop/view.png" atomically:YES]; 15 16 // 4.关闭上下文 17 UIGraphicsEndImageContext();
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。