2012-01-27 13 views
24

मैं एक गेम विकसित कर रहा हूं जिसमें कुछ दृश्य (मेमोरी कार्ड गेम के रूप में) शामिल है और मैं चाहता हूं कि जब उपयोगकर्ता कार्ड पर टैप करता है तो यह फ्लिप होता है और दूसरा दृश्य दिखाता है। मैं इस कोड का उपयोग करें:आईओएस - विशिष्ट दृश्य के लिए केवल फ्लिप एनीमेशन

- (void)flipCard:(id)sender { 

    UIButton *btn=(UIButton *)sender; 
    UIView *view=[btn superview]; 
    UIView *flipView=[[UIView alloc] initWithFrame:[view frame]]; 
    [flipView setBackgroundColor:[UIColor blueColor]]; 
    [[flipView layer] setCornerRadius:10]; 

    NSLog(@"Flip card : view frame = %f, %f",view.frame.origin.x, view.frame.origin.y); 

    [UIView transitionFromView:view toView:flipView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) { 
    }]; 

} 

हर दृश्य में एक पारदर्शी बटन जो पूरे दृश्य को कवर किया है, लेकिन इस विचार पर उपयोगकर्ता नल नल के रूप में है, इसलिए जब बटन। बटन प्रेषक को पास करने के ऊपर विधि को कॉल करें। जब एनीमेशन शुरू होता है तो सभी दृश्य फ़्लिप हो जाते हैं, न केवल प्रेषक से प्राप्त दृश्य। मैं कैसे कर सकता हूं?

+0

शायद कोई प्रत्यक्ष समाधान नहीं है, लेकिन आप टी नहीं कर सकते आपके द्वारा कार्ड पर उपयोग किए जाने वाले बटनों के लिए UIButton को बढ़ाने के लिए आरई और कार्ड के दृश्य पर एक कमजोर पॉइंटर वापस लेना, इसलिए btn.cardView को कॉल करना निश्चित रूप से आपको उस कार्ड का दृश्य प्राप्त करेगा जो आप चाहते थे, अगर पर्यवेक्षक काम नहीं करता है। –

उत्तर

47

निम्नलिखित कोड आपकी समस्या से मदद कर सकता है। मुझे लगता है कि यह एक पारदर्शी बटन का उपयोग करने से क्लीनर है।

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    flipped = NO; 
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 

    [flipContainerView addGestureRecognizer:tapGesture]; 
    [tapGesture release]; 
} 

- (void)handleTap:(UITapGestureRecognizer *)sender { 
    if (sender.state == UIGestureRecognizerStateEnded) { 
     [UIView transitionWithView:flipContainerView 
          duration:1 
          options:UIViewAnimationOptionTransitionFlipFromLeft 
         animations:^{ 

      if (!flipped) { 
       [frontCard setHidden:YES]; 
       [flipContainerView addSubview:backCard.view]; 
       flipped = YES; 
      } else { 
       [frontCard setHidden:NO]; 
       [backCard removeFromSuperview]; //or hide it. 
      } 

     } completion:nil]; 
    } 
} 
+1

बिल्कुल सही जवाब! तुम महान हो! : डी –

10

मुझे एक ही समस्या थी। इंटरनेट पर अलग-अलग पोस्ट खोजने के बाद मैं एक सुरुचिपूर्ण और आसान समाधान के साथ आ गया। मेरे पास कस्टम UIUuttons के रूप में कार्ड हैं। कस्टम UIButton वर्ग में मैं विधि है जो एक फ्लिप एनीमेशन के साथ पृष्ठभूमि छवि में परिवर्तन कहा:

-(void) flipCard{ 
    [UIView transitionWithView:self 
         duration:0.3f 
         options:UIViewAnimationOptionTransitionFlipFromRight|UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         if (self.isFlipped) { 
          [self setBackgroundImage:[UIImage imageNamed:@"card_back_2.png"] forState:UIControlStateNormal]; 
         }else{ 
          [self setBackgroundImage:[UIImage imageNamed:self.cardName] forState:UIControlStateNormal]; 
         } 
        } completion:NULL]; 
    self.isFlipped = !self.isFlipped; 
} 

आशा इस किसी और में मदद करता है के रूप में पहली जवाब पहले से ही स्वीकार किया गया है

अद्यतन

यदि आप इस उप-दृश्य वाले दृश्य पर हैं तो कोड है:

-(void)flipCard:(APCard*)card{ 
    [UIView transitionWithView:card 
         duration:kFlipTime 
         options:UIViewAnimationOptionTransitionFlipFromRight|UIViewAnimationOptionCurveEaseInOut 
        animations:^{ 
         if (card.isFlipped) { 
          [card setBackgroundImage:[UIImage imageNamed:@"card_back_2.png"] forState:UIControlStateNormal]; 
         }else{ 
          [card setBackgroundImage:[UIImage imageNamed:card.cardName] forState:UIControlStateNormal]; 
         } 
        completion:^(BOOL finished) { 
         if (finished) { 
          //DO Stuff 
         } 
        } 
    ]; 
    card.isFlipped = !card.isFlipped; 
} 
संबंधित मुद्दे