2012-03-22 20 views
10

मैं एक्सकोड 4 के लिए लगभग नौसिखिया हूं। एक कस्टम संक्रमण एनीमेशन को जोड़ने के लिए एक तरीका है कि यह स्टोरीबोर्ड में इंटरफ़ेस बिल्डर द्वारा प्रस्तुत चार में से एक नहीं है प्रबंधन? विशेष रूप से, मैं सामान्य "कवर वर्टिकल" के समान एनीमेशन चाहता हूं, लेकिन क्षैतिज। मैं एक दृश्य को बाएं से दाएं (या दाएं से बाएं) तक स्लाइड करने के लिए एक दृश्य चाहता हूं, इसके बजाय "कवर वर्टिकल" संक्रमण में यह नीचे से नीचे तक होता है। मैंने स्वाइप जेश्चर के साथ प्रयास किया लेकिन कोई भाग्य नहीं: यहां तक ​​कि यह ऊपर से नीचे तक संक्रमण कर रहा है और वैसे भी, मुझे समझ में नहीं आता कि डिफॉल संक्रमण नीचे से नीचे क्यों है जब सभी ऐप का डिफ़ॉल्ट संक्रमण आमतौर पर बाएं या दाएं होने का अधिकार होता है बाएं से दाएं, विशेष रूप से मामला आप स्वाइप कर में ...आईओएस सेगुए एनीमेशन बाएं से दाएं (क्षैतिज)

मैं भी भी इस मामले में एक प्रोग्राम के द्वारा जिस तरह से है, लेकिन कोई भाग्य की कोशिश की, इस कोड का उपयोग: मैं इस परिभाषित

#import "JHCustomSegue.h" 

@implementation JHCustomSegue 
- (void) perform { 
    UIViewController *src = (UIViewController *) self.sourceViewController; 
    UIViewController *dst = (UIViewController *) self.destinationViewController; 

    [UIView transitionWithView:src.navigationController.view duration:0.5 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ 
     [src presentModalViewController:dst animated:NO]; 
    } 
    completion:NULL]; 
} 

@end 

इंटरफ़ेस बिल्डर में मेरे segue की कक्षा के रूप में कक्षा। ब्रेकपॉइंट का उपयोग करके, मैंने देखा कि यह फ़ंक्शन परफॉर्म दर्ज करें लेकिन ... प्रदर्शन न करें! मैंने ऐप को पोर्ट्रेट मोड में अवरुद्ध कर दिया है (पता नहीं है कि यह कोई समस्या है)। मैंने एक असली आईपैड और नकली आईफोन पर एप्लिकेशन चलाने की कोशिश की। एक ही समस्या है।

उत्तर

19

आप बाएं से दाएं संक्रमण को प्राप्त करने के लिए कस्टम सेगु के भीतर कैट्रांशन का उपयोग कर सकते हैं। इस #import "QuartzCore/QuartzCore.h" अपने कस्टम Segue

-(void)perform { 

__block UIViewController *sourceViewController = (UIViewController*)[self sourceViewController]; 
__block UIViewController *destinationController = (UIViewController*)[self destinationViewController];      

CATransition* transition = [CATransition animation]; 
transition.duration = .25; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
transition.type = kCATransitionPush; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade 
transition.subtype = kCATransitionFromLeft; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom 



[sourceViewController.navigationController.view.layer addAnimation:transition 
              forKey:kCATransition]; 

[sourceViewController.navigationController pushViewController:destinationController animated:NO];  


} 
+0

क्या यह संभव है कि स्क्रीन नीचे से धक्का दे? मैंने कस्टम कोड के रूप में इस कोड का उपयोग किया और यह वही करता है जो मैंने उल्लेख किया था। –

+0

मुझे पता चला कि समस्या कहां है। यह परिदृश्य है और यह काम करता है जैसे कि यह चित्र था। –

+0

आप transition.subtype के लिए kCATransitionFromBottom उपयोग कर सकते हैं। यहां देखें https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CATransition_Class/Introduction/Introduction.html –

2

मैंने सेगू का भी उसी प्रभाव को करने की कोशिश की, लेकिन सफलता के बिना।

// get the view that's currently showing 
UIView *currentView = self.view; 
// get the the underlying UIWindow, or the view containing the current view 
UIView *theWindow = [currentView superview]; 

UIView *newView = aTwoViewController.view; 

// remove the current view and replace with myView1 
[currentView removeFromSuperview]; 
[theWindow addSubview:newView]; 

// set up an animation for the transition between the views 
CATransition *animation = [CATransition animation]; 
[animation setDuration:0.5]; 
[animation setType:kCATransitionPush]; 
[animation setSubtype:kCATransitionFromRight]; 
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 

[[theWindow layer] addAnimation:animation forKey:@"SwitchToView2"]; 

आप नमूना परियोजना here डाउनलोड कर सकते हैं: इसके बजाय, मैं एक समाधान के लिए इस्तेमाल किया। चीयर्स!

+0

ओह, बहुत बहुत धन्यवाद! मैं इसे एप की कोशिश करूंगा! –

+0

कुछ जो मुझे जोड़ने के लिए याद आया वह था अगर आपको सेगु के साथ ऐसा करने का कोई तरीका मिला, तो हमें बताएं। =) – justinkoh

+0

नहीं, अब तक :) मुझे लगता है कि, हालांकि, यह नेविगेशन नियंत्रकों के साथ और अधिक काम करना संभव है। जैसे ही मैं कर सकता हूं, मैं इसे कुछ समय समर्पित करूंगा। –

8

यहाँ में जोड़े कस्टम seque के लिए काम कर रहे कोड जब नेविगेशन नियंत्रक का उपयोग नहीं है। Github पर इस उदाहरण

override func perform() { 

    var sourceViewController = self.sourceViewController as UIViewController 
    var destinationViewController = self.destinationViewController as UIViewController 

    var transition: CATransition = CATransition() 

    transition.duration = 0.25 
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 
    transition.type = kCATransitionPush; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade 
    transition.subtype = kCATransitionFromLeft; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom 

    sourceViewController.navigationController?.view.layer.addAnimation(transition, forKey: "kCATransition") 
    sourceViewController.navigationController?.pushViewController(destinationViewController, animated: false)  

} 
+0

स्विफ्ट में यह कैसा दिखता है? –

9

जाकिर हैदर के प्रस्तुत करने के आधार पर, यहाँ ही कार्यक्षमता स्विफ्ट में अनुवाद किया है एक उदाहरण ऐप में दाएं से बाएं से स्पष्ट रूप से UINavigationController के बिना थ्रेड ओपनर के रूप में पूछताछ के लिए।

साहिल के जवाब में कोड आईओएस 8 में मेरे लिए काम नहीं करता था। इसलिए मुझे इस मुद्दे पर थोड़ा और जांच करनी पड़ी।

'UIView एनिमेट विथडिशन' आईओएस 8 पर काम करता है, जबकि 'destinationController.view.layer addAnimation: transition' वर्तमानViewController के साथ संयोजन में कुछ भी नहीं करता है।

+0

क्या इस कोड स्विफ्ट में की तरह लग रही है, तो एक नेविगेशन नियंत्रक का उपयोग नहीं होगा? –

3

चेक आउट::

https://github.com/itinance/iOSCustomSegue

यह एक कस्टम segue का उपयोग करता

-(void)perform 
{ 

UIViewController *sourceViewController = (UIViewController*)[self sourceViewController]; 
UIViewController *destinationController = (UIViewController*)[self destinationViewController]; 

CATransition* transition = [CATransition animation]; 
transition.duration = 0.25; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
transition.type = kCATransitionMoveIn; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade 
transition.subtype = kCATransitionFromRight; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom 

[destinationController.view.layer addAnimation:transition forKey:kCATransition]; 
[sourceViewController presentViewController:destinationController animated:NO completion:nil]; 
} 
संबंधित मुद्दे