IOS 는 UICollectionView 를 사용 하여 무한 윤방 효 과 를 실현 합 니 다.
이 사례 데모 에 서 는 수 동 윤 방과 자동 윤 방 을 지원 하 는 첫 페이지 윤 방 사례 를 보 여 준다.지식 포 인 트 는 주로 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이상 은 본문의 전체 내용 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.