iOS学习笔记(十四)————椭圆运动

/ 0评 / 0

来看一下后面可能会用到的椭圆运动是怎么做到的,我们拿地球围着太阳转来举个例子。
其实在这里椭圆运动的实现很简单,就是使用定时器改变地球的中心坐标,而这个中心的坐标使用椭圆的参数方程计算出来,先来看一下椭圆的参数方程

//    椭圆参数方程
    //    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

这里主要用到的就是椭圆的参数方程,了解了参数方程之后就很好实现这个效果了。

ellipse

代码请查看 http://git.oschina.net/zcb1603999/LearningiOS

评论已关闭。