_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 : CGAffineTransform의
-(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++;
}
}
첫 번째 경우 (성공 쿼리 후 데이터베이스를 구문 분석은) :
[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++;
}];
카드를 없애는 방법과이 부분이 다시 호출되는 방법을 보여줍니다. – Unheilig
내 질문에 편집 됨 – RodMatveev
여기에서 변경해야 할 사항이 많이 있습니다. 질문에 초점을 맞추자 : 첫 번째 코드 블록은 어디에 두어야합니까? 방금 추가 한 코드에는 없습니다. – Unheilig