2013-04-22 1 views
0

У меня возникли проблемы с CGAffineTransformMakeScale. Я показываю вид &, скрывая его, используя приведенный ниже код. Впервые он показывает & отлично отстраненный. Но после того, как он не появился снова. После того, как я распечатал журналы, на самом деле он вышел из экранных консорантов.CGAffineTransformMakeScale не работает должным образом

I treid применение сброса преобразование в увольнении, использование 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>> 

Что происходит worng на здесь.

+0

Когда/где вы применяете свойство CGAffineTransformIdentity для покоя матрицы преобразования? –

+0

в dimissView, я вставил журнал относительно этого – JiteshW

ответ

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]; 
        } 

        }]; 
} 

// EDIT - попробуйте это.

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); 
+0

Можете ли вы сказать разницу в применении трансфера в одном и том же представлении в анимационном и готовом блоке. Я попытался, но моя проблема все еще сохраняется. – JiteshW

+0

блок завершения передает переменную ua, называемую законченной ... анимация, возможно, завершилась даже без полного завершения нужной анимации, то есть другой вид появился поверх текущего анимационного представления .. затем проверьте законченное == YES, затем назначьте, что это конечное состояние, когда анимация предположительно закончена ... поэтому, когда анимированный вид снова виден ... он появится там, где он должен. – chuthan20

+0

Проверьте внесенное мной изменение в сообщение ... и сбросьте преобразование, установив его в матрицу идентичности внутри метода showWithAnimation. – chuthan20

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]; 
      } 
     } 
    }]; 


} 

это будет определенно помогите вам ...........