定时器(图片+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
正在回答
我这边检测定时器没有什么问题,你是不是第一张图片到第二张图片的过程时间会比较长,这个可能是程序还未完全加载完成导致的,后面几张图片,你可以自己数一下时间。你可以自己多添加几张图片,然后看一下时间的间隔。
- 参与学习 150 人
- 解答问题 94 个
搞定网络多线程,掌握动画特效,熟悉第三方库等实用技术的使用,更有最新swift UI控件的讲解,让您不断丰富自己的开发技能。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星