2014-12-06 2 views
0
_cardView =[card initCard]; 

[self.view addSubview:_cardView]; 

_cardView.transform=CGAffineTransformScale(CGAffineTransformIdentity, 0.1, 0.1); 
[UIView animateWithDuration:0.3 
       animations:^{ 
        _cardView.transform=CGAffineTransformIdentity; 
       }]; 

У меня есть представление, которое я оживляю, чтобы оно выглядело так, как будто оно расширяется с точки (подобно анимации открываемого приложения). Это представление возвращается из [card initCard], при этом карта является настраиваемым классом и назначается _cardView. Используя CGAffineTransformScale, я сначала уменьшаю масштаб, а затем оживляю увеличение масштаба. Это отлично работает для первой карты, которая показана. Однако, когда _cardView установлен на nil, и ему назначается новая карта, тот же код преобразования и анимации создает неправильную анимацию, которая увеличивает представление до масштаба до масштаба. Я предполагаю, что проблема заключается в создании шкалы 0,1,0,1, но я не смог ее решить.Сброс шкалы после трансформации

Установка на ноль:

else if (sender.state == UIGestureRecognizerStateEnded || sender.state == UIGestureRecognizerStateCancelled || sender.state == UIGestureRecognizerStateFailed) 
{ 
    if(sender.view.center.x>0){ 
     [UIView animateWithDuration:0.2 animations:^{ 
      CGRect rect=[sender.view frame]; 
      rect.origin.x=([self.view frame].size.width/2)-129.5; 
      [sender.view setFrame:rect]; 
      sender.view.alpha = 0.8; 

     }]; 
    }else{ 
     [UIView animateWithDuration:0.5 animations:^{ 
      _protoypeView.alpha=0.0; 
      _protoypeView=nil; 
      _cardView=nil; 

      [self nextCard]; 
     }]; 
    } 
} 

и функция nextCard:

-(void)nextCard{ 
    if(cardNumber>[questionArray count]-1){ 
     NSLog(@"Out of cards"); 
    }else{ 
     QuestionCard *card=[[QuestionCard alloc]init]; 
     NSArray* array =[[NSArray alloc]initWithArray:questionArray[cardNumber]]; 
     card.questionString=array[3]; 
     card.whenPosted=array[0]; 
     card.isAnon=array[2]; 
     card.user=array[1]; 
     card.replies=array[4]; 
     card.profileImg=array[5]; 
     _cardView =[card initCard]; 
     [self.view addSubview:_cardView]; 
     _cardView.alpha=0.0; 
     _cardView.transform=CGAffineTransformScale(CGAffineTransformIdentity, -1, -1); 
     _cardView.transform=CGAffineTransformIdentity; 
     [UIView animateWithDuration:1 animations:^{ 
      _cardView.alpha=0.7; 
     }]; 

     UIPanGestureRecognizer * pan1 = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanImage:)]; 
     pan1.minimumNumberOfTouches = 1; 
     [_cardView addGestureRecognizer:pan1]; 
     yOfView=[_cardView frame].origin.y+([_cardView frame].size.height/2); 
     cardNumber++; 

    } 
} 

Первый случай CGAffineTransform (после успешного запроса к Разбираем базы данных):

[UIView animateWithDuration:0.5 animations:^{ 
       _protoypeView.alpha=0.0; 
      }completion:^(BOOL finished){ 
       QuestionCard *card=[[QuestionCard alloc]init]; 
       NSArray* array =[[NSArray alloc]initWithArray:questionArray[cardNumber]]; 
       card.questionString=array[3]; 
       card.whenPosted=array[0]; 
       card.isAnon=array[2]; 
       card.user=array[1]; 
       card.replies=array[4]; 
       card.profileImg=array[5]; 
       _cardView =[card initCard]; 

       [self.view addSubview:_cardView]; 

       _cardView.transform=CGAffineTransformScale(CGAffineTransformIdentity, 0.0, 0.0); 
       [UIView animateWithDuration:0.3 
           animations:^{ 
            _cardView.transform=CGAffineTransformIdentity; 
           }]; 
       UIPanGestureRecognizer * pan1 = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanImage:)]; 
       pan1.minimumNumberOfTouches = 1; 
       [_cardView addGestureRecognizer:pan1]; 
       yOfView=[_cardView frame].origin.y+([_cardView frame].size.height/2); 
       cardNumber++; 

      }]; 
+0

Показать часть, как «nil» извлечь карту и как эта часть называется снова. – Unheilig

+0

Отредактировал мой вопрос – RodMatveev

+0

Есть много вещей, которые нужно изменить здесь; но давайте сосредоточимся на вашем вопросе: где вы размещаете первый блок кода? Это ни в одном из кода, который вы только что добавили. – Unheilig

ответ

0

Нашли проблему - [self nextCard] был вызван в анимации, но должен быть вызван в comp letion.

Смежные вопросы