定时器(图片+pageControl圆点)越播越快?

定时器(图片+pageControl圆点)越播越快?

@interface ViewController (){

UIPageControl *pageControl;

int imageIndex;

UIScrollView *sv_boot;

NSTimer *timer;

MainViewController *tbc_main;

}



@property(nonatomic,strong)AppDelegate *app;

@end

@implementation ViewController



- (void)viewDidLoad {

[super viewDidLoad];



// 1 实现引导页面 判断第几次进入 第一次出现 第二次不出现

BOOL firstLoad = [self readDatePreference];

if (!firstLoad) {

sv_boot = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH,SCREEN_HEIGHT)];

sv_boot.contentSize = CGSizeMake(SCREEN_WIDTH*3, SCREEN_HEIGHT);

sv_boot.contentOffset = CGPointMake(0, 0);

sv_boot.pagingEnabled = true;

for (int i = 0; i < 3; i++) {

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(i*SCREEN_WIDTH, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];

NSString *imageName = [NSString stringWithFormat:@"load%d.jpg",i+1];

imageView.image = [UIImage imageNamed:imageName];

[sv_boot addSubview:imageView];



// 3 添加一个 立即进入 button按钮 屏幕适配

CGFloat bt_w = SCREEN_WIDTH*0.6;

CGFloat bt_h = 40;

CGFloat bt_x = SCREEN_WIDTH*2 + (SCREEN_WIDTH-bt_w)/2;

CGFloat bt_y = SCREEN_HEIGHT-bt_h-50;



UIButton *bt_enter = [[UIButton alloc]initWithFrame:CGRectMake(bt_x, bt_y, bt_w, bt_h)];

[bt_enter setTitle:@"立即进入" forState:UIControlStateNormal];

[bt_enter setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

[bt_enter addTarget:self action:@selector(btAction) forControlEvents:UIControlEventTouchUpInside];





bt_enter.layer.cornerRadius = 5.0;

bt_enter.layer.borderWidth = 2.0;

bt_enter.layer.borderColor = [UIColor whiteColor].CGColor;

[sv_boot addSubview:bt_enter];

[self.view addSubview:sv_boot];



// 5.3 把读取的数据写入本地

[self writeDatePreference:true];

}



// 4 UIPageControl轮播圆点

pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 30)];

pageControl.numberOfPages = 3;

pageControl.currentPage = 0;

pageControl.pageIndicatorTintColor = [UIColor whiteColor];

pageControl.currentPageIndicatorTintColor = [UIColor greenColor];

pageControl.transform=CGAffineTransformScale(CGAffineTransformIdentity, 1.5, 1.5);

pageControl.center = CGPointMake(self.view.center.x, SCREEN_HEIGHT-130);//y轴位置

[self.view addSubview:pageControl];





// 4.1 自动翻页效果需要定义一个定时器 创建一个定时器的实例对象

timer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(imagePlay) userInfo:nil repeats:true];

//imageindex初始化为第0页

imageIndex = 0;



} else {

// 5.4 跳入立即进入页面



[self btAction];

}



}



// 3.2 实现button点击t进入新页面

-(void)btAction{

tbc_main = [[MainViewController alloc]init];

self.app = (AppDelegate*)[[UIApplication sharedApplication]delegate];

self.app.window.rootViewController = tbc_main;

}





// 5 判断是否第一次进入,如果是第一次则显示引导页,第二次进入则不显示引导页

// 5.1 数据写入本地

-(void)writeDatePreference:(BOOL)flag{

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

[defaults setObject:[NSNumber numberWithBool:flag] forKey:@"isFirstEnter"];

[defaults synchronize];

}



// 5.2 读取本地数据 BOOL

-(BOOL)readDatePreference{

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSNumber *number = [defaults objectForKey:@"isFirstEnter"];

return number.boolValue;

}

// 4.2 实现pageControl与图片同步循环一次

-(void)imagePlay{

pageControl.currentPage = imageIndex;//pageControl现在的显示位置

sv_boot.contentOffset = CGPointMake(imageIndex*SCREEN_WIDTH,0);//初始图片位置

imageIndex++;

if (imageIndex >= 3) {

imageIndex = 2;

}

}

@end

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

我这边检测定时器没有什么问题,你是不是第一张图片到第二张图片的过程时间会比较长,这个可能是程序还未完全加载完成导致的,后面几张图片,你可以自己数一下时间。你可以自己多添加几张图片,然后看一下时间的间隔。

  • 幕布斯2332854 提问者 #1
    我设置的是2秒;第1到第2张是2秒轮播,第2到第3就变成1秒了;是什么原因呢(-_-)
    2018-12-11 16:04:11
  • Tender10 回复 提问者 幕布斯2332854 #2
    我看你的代码设置的是1.5
    2018-12-11 16:11:52
  • 幕布斯2332854 提问者 回复 Tender10 #3
    我数值改大也不起作用,第二张第三张轮播图唰的一下就过去了(-_-)
    2018-12-11 18:30:33
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
iOS提升:网络多线程与常用主流框架
  • 参与学习       150    人
  • 解答问题       94    个

搞定网络多线程,掌握动画特效,熟悉第三方库等实用技术的使用,更有最新swift UI控件的讲解,让您不断丰富自己的开发技能。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师