2012年10月27日 星期六

UIView的Animation(六)

在UIView使用旋轉的Function

CGAffineTransformRotate --對影像作一個以中心為圓心的旋轉,並會修改image的資料
CGAffineTransformMakeRotation-只顯示旋轉結果,不會修改image資料,因此只會顯示旋轉一次的結果。


example
Image1.transform = CGAffineTransformRotate(Image1.transform, 角度*PI/180);
Image1.transform = CGAffineTransformMakeRotation(角度*PI/180);


以下例子改自前一篇

1. 增加一個角度的Slider




2. 將元件註冊到mainViewController.h
@property (weak, nonatomic) IBOutlet UISlider *rotationSlider;
@property (weak, nonatomic) IBOutlet UILabel *rotationLabel;



3. 增加相關的程式碼到mainViewController.m
@synthesize rotationLabel;
@synthesize rotationSlider;


int change = 1;

#define kDuration 2   // 动画持续时间(秒)

#define PI   3.14159

.....

- (IBAction)transferAction:(id)sender {
   
    UIButton *button = (UIButton *)sender;
    NSInteger tag = button.tag;
   
    CGContextRef context = UIGraphicsGetCurrentContext();
    [UIView beginAnimations:nil context:context];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDuration:kDuration];
   
    switch (tag) {
        case 105:
            [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
            break;
        case 106:
            [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
            break;
        case 107:
            [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
            break;
        case 108:
            [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
            break;
        default:
            break;
    }
   
    self.typeID += 1;
    if (self.typeID > 3) {
        self.typeID = 0;
    }
   
    if (twoImageMode.on == YES) {
       NSUInteger image1 = [[self.view subviews] indexOfObject:self.Image1];
       NSUInteger image2 = [[self.view subviews] indexOfObject:self.Image2];
       [self.view exchangeSubviewAtIndex:image1 withSubviewAtIndex:image2];
    }
    else {
       
        [self removeImageView];
   
        if (image1Enable.on == YES) {
       
           
            if (unlimitChange.on == YES)
                Image1.transform = CGAffineTransformScale(Image1.transform, xValueSlider.value
                                                      , yValueSlider.value);
            else
                Image1.transform = CGAffineTransformMakeScale(xValueSlider.value
                                                          , yValueSlider.value);
           
           
             if (unlimitChange.on == YES)
                Image1.transform = CGAffineTransformRotate(Image1.transform, 

                                           rotationSlider.value*PI/180);
             else
                Image1.transform = CGAffineTransformMakeRotation(rotationSlider.value*PI/180);



           
            Image1.alpha = transparentSlider.value;
           
            [self.view  addSubview:Image1];
            [self.view sendSubviewToBack:Image1];
        }
        else  {
           
            if (unlimitChange.on == YES)
                Image2.transform = CGAffineTransformScale(Image2.transform, xValueSlider.value
                                                          , yValueSlider.value);
            else
                Image2.transform = CGAffineTransformMakeScale(xValueSlider.value
                                                              , yValueSlider.value);
           
            if (unlimitChange.on == YES)
                Image2.transform = CGAffineTransformRotate(Image2.transform, 

                                rotationSlider.value*PI/180);
            else
                Image2.transform = CGAffineTransformMakeRotation(rotationSlider.value*PI/180);

           
            Image2.alpha = transparentSlider.value;
           
            [self.view  addSubview:Image2];
            [self.view sendSubviewToBack:Image2];
        }
    }
       
       
    [UIView setAnimationDelegate:self];
    // 动画完毕后调用某个方法
    //[UIView setAnimationDidStopSelector:@selector(animationFinished:)];
    [UIView commitAnimations];
   
    if (change == 1)
        change = 2;
    else
        change = 1;
}

.....
- (IBAction)rotationAngleChange:(id)sender {
   
    rotationLabel.text = [NSString stringWithFormat:@"旋轉角度:%3.1f度", rotationSlider.value];
   
 }



4. 執行結果,顯示X方向反轉及90度旋轉的不同