0

我遇到了麻烦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>>

这是怎么回事。

4

2 回答 2

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);
于 2013-04-22T14:00:39.637 回答
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];
             } 
         }
     }];


}

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

于 2013-05-01T08:38:35.217 回答