IOS 는 UICollectionView 를 사용 하여 무한 윤방 효 과 를 실현 합 니 다.

5313 단어 iOS윤파
사례 설명
이 사례 데모 에 서 는 수 동 윤 방과 자동 윤 방 을 지원 하 는 첫 페이지 윤 방 사례 를 보 여 준다.지식 포 인 트 는 주로 UICollection View 와 NSTimer 의 사용 에 집중 된다.

2.지식 비축
2.1 UICollectionView 가로 레이아웃
UICollection View FlowLayout 의 scrollDirection 을 UICollection View ScrollDirection Horizontal 로 설정 하면 됩 니 다.
2.2 NSTimer 의 기본 사용
NSTimer 초기 화:
 + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
1),(NSTimeInterval)ti:Timer 를 예약 하고 시간 간격 을 설정 합 니 다.
시간 간격 대상 을 입력 하고 초 단위,하나>0 의 부동 소수점 형식의 값 을 표시 합 니 다.이 값 이 0 이면 시스템 은 기본적으로 0.1 입 니 다.
2),target:(id)aTarget:보 낸 대상,예 를 들 어 self
3),selector:(SEL)aSelector:방법 선택 기,시간 간격 으로 인 스 턴 스 호출 방법 을 선택 하 십시오.
4),userInfo:(nullable id)userInfo:전 참 이 필요 합 니 다.nil 이 될 수 있 습 니 다.
5),repeats:(BOOL)yes Orno:YES 일 때 타 이 머 는 실효 되 거나 풀 릴 때 까지 계속 순환 합 니 다.NO 일 때 타 이 머 는 한 번 순환 해서 보 내 면 효력 을 잃 습 니 다.
타이머 켜 기:
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
타이머 닫 기:
[self.timer invalidate];
2.3 자동 윤 방과 수 동 윤 방 의 전환
초기 화 할 때,우 리 는 기본적으로 타 이 머 를 켜 고 다음 그림 으로 전환 하 는 함 수 를 정시 에 실행 합 니 다.사용자 가 View 를 만 졌 을 때,우 리 는 타 이 머 를 닫 고 UI Collection View 를 수 동 으로 전환 해 야 합 니 다.사용자 의 손 이 View 를 떠 났 을 때,우 리 는 타 이 머 를 다시 켜 서 자동 으로 돌아 가면 서 전환 해 야 합 니 다.
3.핵심 코드 분석
3.1 UICollection View FlowLayout 대상 을 생 성하 고 스크롤 방향 을 수평 스크롤 로 설정 합 니 다.  

 UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
 flowLayout.itemSize = CGSizeMake(SCREEN_WIDTH, 200);
 flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
 flowLayout.minimumLineSpacing = 0;
3.2 UICollectionView 대상 초기 화 

 UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, self.navBarHeight, SCREEN_WIDTH, 200) collectionViewLayout:flowLayout];
 collectionView.delegate = self;
 collectionView.dataSource = self;
 collectionView.showsHorizontalScrollIndicator = NO;
 collectionView.pagingEnabled = YES;
 collectionView.backgroundColor = [UIColor clearColor];
 [self.view addSubview:collectionView];
3.3,UICollectionView 의 UICollectionView DataSource 에이전트 방법

#pragma mark- UICollectionViewDataSource
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
 return YYMaxSections;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
 return self.newses.count;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{


 YYCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:YYIDCell forIndexPath:indexPath];
 if(!cell){
 cell = [[YYCell alloc] init];
 }
 cell.news=self.newses[indexPath.item];
 return cell;
}
3.4 타이머 의 작 동 과 닫 기

#pragma mark      
-(void) addTimer{
 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(nextpage) userInfo:nil repeats:YES];
 [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
 self.timer = timer ;

}

#pragma mark      
-(void) removeTimer{
 [self.timer invalidate];
 self.timer = nil;
}
3.5.수 동 전환 과 자동 라운드 방송의 전환

-(void) scrollViewWillBeginDragging:(UIScrollView *)scrollView{
 [self removeTimer];
}

#pragma mark           
-(void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
 [self addTimer];

}

#pragma mark     
-(void) scrollViewDidScroll:(UIScrollView *)scrollView{
 int page = (int) (scrollView.contentOffset.x/scrollView.frame.size.width+0.5)%self.newses.count;
 self.pageControl.currentPage =page;
}
3.6 자동 으로 돌아 가면 서 다음 View 로 전환 하 는 방법

-(void) nextpage{
 NSIndexPath *currentIndexPath = [[self.collectionView indexPathsForVisibleItems] lastObject];

 NSIndexPath *currentIndexPathReset = [NSIndexPath indexPathForItem:currentIndexPath.item inSection:YYMaxSections/2];
 [self.collectionView scrollToItemAtIndexPath:currentIndexPathReset atScrollPosition:UICollectionViewScrollPositionLeft animated:NO];

 NSInteger nextItem = currentIndexPathReset.item +1;
 NSInteger nextSection = currentIndexPathReset.section;
 if (nextItem==self.newses.count) {
 nextItem=0;
 nextSection++;
 }
 NSIndexPath *nextIndexPath = [NSIndexPath indexPathForItem:nextItem inSection:nextSection];

 [self.collectionView scrollToItemAtIndexPath:nextIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:YES];
}
데모 다운로드 주소:https://github.com/yixiangboy/YXCollectionView
이상 은 본문의 전체 내용 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기