iOS 는 UIScrollView 를 사용 하여 무한 순환 라운드 맵 효 과 를 실현 합 니 다.
5032 단어 iOSUIScrollView윤파 도
코드:
//
// ViewController.m
//
//
// Created by limin on 17/8/23.
// Copyright © 2017 none. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()<UIScrollViewDelegate>
/* */
@property(nonatomic,strong)NSTimer *rotateTimer;
/* */
@property(nonatomic,strong)UIPageControl *myPageControl;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// scroolview
UIScrollView *rotateScrollView = [[UIScrollView alloc]initWithFrame:self.view.frame];
//
rotateScrollView.contentSize = CGSizeMake(CGRectGetWidth(self.view.frame)*3, CGRectGetHeight(self.view.frame));
//
rotateScrollView.pagingEnabled = YES;
//
rotateScrollView.showsHorizontalScrollIndicator = NO;
// ,uilabel
for (int i=0; i<3; i++) {
UILabel *subLabel = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetWidth(self.view.frame)*i, 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame))];
subLabel.tag = 1000+i;
subLabel.text = [NSString stringWithFormat:@" %d ",i];
[subLabel setFont:[UIFont systemFontOfSize:80]];
subLabel.adjustsFontSizeToFitWidth = YES;
[subLabel setBackgroundColor:[UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1.0]];
[rotateScrollView addSubview:subLabel];
}
UILabel *tempLabel = [rotateScrollView viewWithTag:1000];
// , 。
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(CGRectGetWidth(self.view.frame)*3, 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame))];
label.backgroundColor = tempLabel.backgroundColor;
label.text = tempLabel.text;
label.font = tempLabel.font;
label.adjustsFontSizeToFitWidth = YES;
[rotateScrollView addSubview:label];
[self.view addSubview:rotateScrollView];
rotateScrollView.tag = 1000;
self.myPageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, CGRectGetHeight(self.view.frame)-50, CGRectGetWidth(self.view.frame), 50)];
self.myPageControl.numberOfPages = 3;
self.myPageControl.currentPage = 0;
[self.view addSubview:self.myPageControl];
//
self.rotateTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(changeView) userInfo:nil repeats:YES];
//
rotateScrollView.delegate = self;
}
#pragma mark --
// , 。
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
NSLog(@" , ");
//setFireDate:
//[NSDate distantFuture]:
[self.rotateTimer setFireDate:[NSDate distantFuture]];
}
// ( ), ,
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
// , 1.5
//[NSDate dateWithTimeInterval:1.5 sinceDate:[NSDate date]] 1.5 。
NSLog(@" ");
[self.rotateTimer setFireDate:[NSDate dateWithTimeInterval:1.5 sinceDate:[NSDate date]]];
}
//
- (void)changeView{
// scrollView
UIScrollView *scrollView = [self.view viewWithTag:1000];
// contentOffset
float offset_X = scrollView.contentOffset.x;
//
offset_X += CGRectGetWidth(self.view.frame);
// , 。 。
if (offset_X > CGRectGetWidth(self.view.frame)*3) {
scrollView.contentOffset = CGPointMake(0, 0);
}
// , 。 pageControl 。
if (offset_X == CGRectGetWidth(self.view.frame)*3) {
self.myPageControl.currentPage = 0;
}else{
self.myPageControl.currentPage = offset_X/CGRectGetWidth(self.view.frame);
}
//
CGPoint resultPoint = CGPointMake(offset_X, 0);
//
// , ,
if (offset_X >CGRectGetWidth(self.view.frame)*3) {
self.myPageControl.currentPage = 1;
[scrollView setContentOffset:CGPointMake(CGRectGetWidth(self.view.frame), 0) animated:YES];
}else{
[scrollView setContentOffset:resultPoint animated:YES];
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.