来看一下后面可能会用到的椭圆运动是怎么做到的,我们拿地球围着太阳转来举个例子。
其实在这里椭圆运动的实现很简单,就是使用定时器改变地球的中心坐标,而这个中心的坐标使用椭圆的参数方程计算出来,先来看一下椭圆的参数方程
// 椭圆参数方程
// int x = 中心点x + 长半轴*cos(角度/弧度);
// int y = 中心点y + 短半轴*sin(角度/弧度);
我这里为了明显搞了好几个地球围着太阳转,下面来看一下是怎么实现的~
//为了重用先来自定义一个imageView
@interface DCImageView : UIImageView
@property int angle;
@end
#import "ViewController.h"
#import "DCImageView.h"
#define LONGRADIUS 120
#define SHORTRADIUS 70
#define SUM(a,b) (a+b)
//函数宏定义
#define SUANFA(angle) angle * (M_PI/180)
@interface ViewController (){
int angle;
UIImageView *earthImageView;
NSMutableArray *imageArray;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self ellipse];
}
- (void)ellipse{
UIImageView *sun = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 80 , 80)];
sun.center = self.view.center;
// sun.backgroundColor = [UIColor redColor];
sun.image = [UIImage imageNamed:@"sun"];
// sun.backgroundColor = [UIColor redColor];
[self.view addSubview:sun];
imageArray = [[NSMutableArray alloc] initWithCapacity:0];
for (int i = 0; i < 12; i ++) {
DCImageView *earth = [[DCImageView alloc] initWithFrame:CGRectMake(265, 25, 50, 50)];
earth.angle = 30 * i;
int x= self.view.center.x + 150*cos(earth.angle*M_PI/180);
int y= self.view.center.y + 70*sin(earth.angle*M_PI/180);
earth.center = CGPointMake(x, y);
// earth.center = sun.center;
earth.image = [UIImage imageNamed:@"earth"];
[self.view addSubview:earth];
[imageArray addObject:earth];
// NSLog(@"%d",earth.angle);
}
//定时器
[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
}
- (void)onTimer{
for (DCImageView *image in imageArray) {
image.angle +=10;
int x= self.view.center.x + 150*cos(image.angle*M_PI/180);
int y= self.view.center.y + 70*sin(image.angle*M_PI/180);
image.center = CGPointMake(x, y);
if (image.angle == 360) {
image.angle = 0;
}
NSLog(@"%d",image.angle);
}
}
@end
这里主要用到的就是椭圆的参数方程,了解了参数方程之后就很好实现这个效果了。