CGAffineTransformMakeScale无法正常运行

时间:2013-04-22 10:21:09

标签: iphone core-graphics cgaffinetransform uianimation

我遇到CGAffineTransformMakeScale时遇到问题。我正在显示一个视图&使用下面的代码隐藏它。它第一次显示&完全被解雇了。但之后再没有出现。在我打印完日志之后,它实际上已经不再是屏幕上的coorediantes了。

我在解雇时使用重置转换,使用CGAffineTransformIdentity,但仍无法正常工作。

 - (void) showWithAnimation
    {
        float mheight = customView.frame.size.height;

        UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;

        if(!keyWindow)
        {
            NSArray *windows = [UIApplication sharedApplication].windows;

            if(windows.count > 0)
                keyWindow = [windows lastObject];

            keyWindow = [windows objectAtIndex:0];
        }

        UIView *containerView = [[keyWindow subviews] objectAtIndex:0];

        CGRect frame = customView.frame;
        frame.origin.y = -mheight;
        customView.frame = frame;

        NSLog(@"customView - %@", customView);

        [containerView addSubview:customView];

        customView.alpha = 0;
        customView.transform = CGAffineTransformMakeScale(0.01, 0.01);
        customView.center = CGPointMake((ScreenBounds().size.width / 2) - 24, ScreenBounds().size.height / 2);

        NSLog(@"customView After applying transfrom - %@", customView);


        [UIView animateWithDuration:0.3
                              delay:0.0
                            options:UIViewAnimationCurveEaseInOut
                         animations:^{
                             customView.transform = CGAffineTransformMakeScale(1, 1);
                                customView.alpha = 1;
                         }
                         completion:^(BOOL finished){

                             self.isVisible = YES;
                             NSLog(@"customView Displayed .....");
                             NSLog(@"customView - %@", customView);
        }];
    }

    - (void)dismissWithAnimation
    {
        [UIView animateWithDuration:0.3
                              delay:0.0
                            options:UIViewAnimationCurveEaseInOut
                         animations:^{
                             customView.transform = CGAffineTransformMakeScale(0.01, 0.01);
                             customView.alpha = 0;
                         }
                         completion:^(BOOL finished)
                         {
                             self.isVisible = NO;

**//Edit: I tried applying CGAffineTransformIdentity at here**

                             [customView removeFromSuperview];
                         }];
    }

以下是日志,

--> 1st time logs

customView -> <UIView: 0x205a1e50; frame = (24 -150; 272 150); layer = <CALayer: 0x205a1eb0>>

customView After applying transfrom - <UIView: 0x205a1e50; frame = (134.64 283.25; 2.72 1.5); transform = [0.01, 0, 0, 0.01, 0, 0]; alpha = 0; layer = <CALayer: 0x205a1eb0>>

customView Displayed .....
customView - <UIView: 0x205a1e50; frame = (0 209; 272 150); layer = <CALayer: 0x205a1eb0>>


--> 2nd time logs

customView -> <UIView: 0x205a1e50; frame = (24 -204; 272 204); transform = [0.01, 0, 0, 0.01, 0, 0]; alpha = 0; animations = { transform=<CABasicAnimation: 0x2072c620>; opacity=<CABasicAnimation: 0x2072df20>; }; layer = <CALayer: 0x205a1eb0>>

customView After applying transfrom - <UIView: 0x205a1e50; frame = (3.03984e-06 182; 272 204); transform = [0.01, 0, 0, 0.01, 0, 0]; alpha = 0; animations = { transform=<CABasicAnimation: 0x2072c620>; opacity=<CABasicAnimation: 
0x2072df20>; }; layer = <CALayer: 0x205a1eb0>>

customView Displayed .....

customView - <UIView: 0x205a1e50; frame = (-13464 -9916; 27200 20400); layer = <CALayer: 0x205a1eb0>>

这里有什么问题。

2 个答案:

答案 0 :(得分:1)

我总是检查动画是否完成......并在动画开始之前重置动画......就像这样......

  // skipping some of ur code... 

    customView.transform = CGAffineTransformMakeScale(0.01, 0.01);
        [UIView animateWithDuration:0.3
                              delay:0.0
                            options:UIViewAnimationCurveEaseInOut
                         animations:^{
                             customView.transform = CGAffineTransformMakeScale(1, 1);
                                customView.alpha = 1;
                         }
                         completion:^(BOOL finished){
                         if (finished)
                         {

                             customView.transform = CGAffineTransformMakeScale(1, 1);
                                customView.alpha = 1;

                             self.isVisible = YES;
                             NSLog(@"customView Displayed .....");
                             NSLog(@"customView - %@", customView);
                         }
        }];

//解雇动画

- (void)dismissWithAnimation
{
    customView.transform = CGAffineTransformMakeScale(1.0, 1.0);
    [UIView animateWithDuration:0.3
                          delay:0.0
                        options:UIViewAnimationCurveEaseInOut
                     animations:^{
                         customView.transform = CGAffineTransformMakeScale(0.01, 0.01);
                         customView.alpha = 0;
                     }
                     completion:^(BOOL finished) {
                     if (finished)
                     {
                         self.isVisible = NO;
                         customView.transform = CGAffineTransformMakeScale(0.01, 0.01);
                         customView.alpha = 0;
                        [customView removeFromSuperview];
                    }

                     }];
}

//编辑 - 试试这个。

customView.alpha = 0;

customView.transform = CGAffineTransformIdentity; //Reset the transformation...
customView.transform = CGAffineTransformMakeScale(0.01, 0.01);

customView.center = CGPointMake((ScreenBounds().size.width / 2) - 24, ScreenBounds().size.height / 2);

答案 1 :(得分:0)

使用以下功能添加........

-(void) addSubViewWithPopUpAnimation:(UIView *)subView toView:(UIView *)containerView
{
    [subView setTransform:CGAffineTransformMakeScale(0.1, 0.1)];

    [subView setAlpha:0.0f];

    [containerView addSubview:subView];

    [UIView animateWithDuration:0.3 animations:^
     {
         [subView setTransform:CGAffineTransformMakeScale(1.15, 1.15)];
     }
                     completion:^(BOOL finished)
     {
         if(finished)
         {
             [UIView animateWithDuration:0.15 animations:^
              {
                  [subView setTransform:CGAffineTransformMakeScale(1.0, 1.0)];
                  [subView setAlpha:1.0f];
              }];
         }

     }];
}

使用以下功能删除........

-(void) removeSubViewWithPopUpAnimation:(UIView *)subView
{
    [subView setAlpha:1.0f];

    [subView setTransform:CGAffineTransformMakeScale(1.0, 1.0)];

    [UIView animateWithDuration:0.3 animations:^
     {
         [subView setTransform:CGAffineTransformMakeScale(0.01, 0.01)];
     }
                     completion:^(BOOL finished)
     {
         if(finished)
         {
             if([subView superview])
             {
                 [subView removeFromSuperview];
                 [subView setAlpha:0.0f];
             } 
         }
     }];


}

这肯定会帮助你............