首页 > 代码库 > 定时器实现的地球围绕太阳旋转
定时器实现的地球围绕太阳旋转
一个地球围绕太阳旋转
1 #import "HUAppDelegate.h" 2 3 #define CENTER_X 160 4 #define CENTER_Y 240 5 #define RADIUS 130 6 7 @implementation HUAppDelegate 8 9 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions10 {11 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];12 self.window.backgroundColor = [UIColor blackColor];13 [self.window makeKeyAndVisible];14 15 UIImageView * sun = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"fireball.png"]];16 sun.bounds = CGRectMake(0, 0, 62, 62);17 sun.center = CGPointMake(CENTER_X, CENTER_Y);18 [self.window addSubview:sun];19 20 UIImageView * earth = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"earth.png"]];21 earth.bounds = CGRectMake(0, 0, 31, 31);22 earth.center = CGPointMake(CENTER_X + RADIUS * cos(0), 1.5 * CENTER_Y + RADIUS * sin(0));23 earth.tag = 10;24 [self.window addSubview:earth];25 26 [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(ratate) userInfo:nil repeats:YES];27 28 return YES;29 }30 31 - (void)ratate32 {33 static int angle = 0;34 angle ++;35 UIImageView *imageView = (UIImageView *)[self.window viewWithTag:10];36 imageView.center = CGPointMake(CENTER_X + RADIUS * cos(angle * M_PI / 180), CENTER_Y + 1.5 * RADIUS * sin(angle * M_PI / 180));37 }38 39 @end
升级版:多个地球围绕太阳旋转(有密集恐惧症的人还真是不能一直盯着看,??)
原理是一样的,只不过是多添加了几个“地球”
1 #import "HUAppDelegate.h" 2 3 #define CENTER_X 160 4 #define CENTER_Y 240 5 #define RADIUS 120 6 7 @implementation HUAppDelegate 8 9 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions10 {11 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];12 self.window.backgroundColor = [UIColor blackColor];13 [self.window makeKeyAndVisible];14 15 UIImageView * sun = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"fireball"]];16 sun.center = CGPointMake(CENTER_X, CENTER_Y);17 sun.bounds = CGRectMake(0, 0, 70, 70);18 [self.window addSubview:sun];19 20 _earthArray = [[NSMutableArray alloc] init];21 for (int i = 0; i < 12; i ++) //有 12 个地球同时旋转22 {23 UIImageView *earth = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"earth"]];24 int angle = 30 * i;25 float huDu = angle * M_PI / 180;26 earth.center = CGPointMake(CENTER_X + RADIUS * cos(huDu), CENTER_Y + 1.5 * RADIUS * sin(huDu));27 earth.bounds = CGRectMake(0, 0, 35, 35);28 [self.window addSubview:earth];29 [_earthArray addObject:earth];30 }31 32 [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(rotate) userInfo:nil repeats:YES];33 34 return YES;35 }36 37 - (void)rotate38 {39 static int count = 0;40 count ++;41 for (int i = 0; i < 12; i ++)42 {43 UIImageView *earth = [_earthArray objectAtIndex:i]; //获取当前地球的起始角度,一遍获取其起始角度44 int angle = 30 * i + count; //获取当前地球的起始角度,然后开始运动45 float huDu = angle * M_PI / 180;46 earth.center = CGPointMake(CENTER_X + RADIUS * cos(huDu), CENTER_Y + 1.5 * RADIUS * sin(huDu));47 }48 49 }50 51 @end
也可以自定义一个继承自 UIImageView 的类,添加一个记载其当前角度的属性
@property int angle;
然后在 rotate 方法里就不需要静态变量来改变“地球”当前的角度
- (void)rotate{ for (int i = 0 ; i < _earthArray.count; i ++) { EarthImageView *earth = [_earthArray objectAtIndex:i]; earth.angle += 1; float huDu = earth.angle * M_PI / 180; earth.center = CGPointMake(CENTER_X + RADIUS * cos(huDu), CENTER_Y + 1.5 * RADIUS * sin(huDu)); }}
定时器实现的地球围绕太阳旋转
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。