मैं हाल ही में किया है
1. transitioningDelegate और यह के प्रतिनिधि विधि
class MasterViewController: UITableViewController,UIViewControllerTransitioningDelegate {
//prepare for segue
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showDetail" {
let detailVC = segue.destinationViewController as! DetailViewController
detailVC.transitioningDelegate = self
// detailVC.detailItem = object//Configure detailVC
}
}
//UIViewControllerTransitioningDelegate
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return LeftTransition()
}
func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
let leftTransiton = LeftTransition()
leftTransiton.dismiss = true
return leftTransiton
}
}
2 सेट:
यहाँ क्षैतिज एनीमेशन प्राप्त करने के लिए एक उदाहरण है सीगू कैसे किया जा रहा है, इस पर अधिक नियंत्रण रखने की आवश्यकता है, इसलिए मैंने अपनी कस्टम सीगू कक्षाएं बनाई हैं जो सभी अलग-अलग दिशाओं में संक्रमण करते हैं। यहां कार्यान्वयन में से एक है:
स्विफ्ट 2।एक्स
override func perform() {
//credits to http://www.appcoda.com/custom-segue-animations/
let firstClassView = self.sourceViewController.view
let secondClassView = self.destinationViewController.view
let screenWidth = UIScreen.mainScreen().bounds.size.width
let screenHeight = UIScreen.mainScreen().bounds.size.height
secondClassView.frame = CGRectMake(screenWidth, 0, screenWidth, screenHeight)
if let window = UIApplication.sharedApplication().keyWindow {
window.insertSubview(secondClassView, aboveSubview: firstClassView)
UIView.animateWithDuration(0.4, animations: {() -> Void in
firstClassView.frame = CGRectOffset(firstClassView.frame, -screenWidth, 0)
secondClassView.frame = CGRectOffset(secondClassView.frame, -screenWidth, 0)
}) {(Finished) -> Void in
self.sourceViewController.navigationController?.pushViewController(self.destinationViewController, animated: false)
}
}
}
यह एक एक संक्रमण "दाएं से बाएं" होगा। आप स्रोत और गंतव्य दृश्य नियंत्रक की प्रारंभिक और समाप्ति स्थिति को बस बदलकर अपनी आवश्यकताओं के लिए इस फ़ंक्शन को संशोधित कर सकते हैं।
यह भी न भूलें कि आपको अपने सेग्यू को "कस्टम सेग्यू" के रूप में चिह्नित करने और इसे नई कक्षा को असाइन करने की आवश्यकता है।
अद्यतन: जोड़ा स्विफ्ट 3 संस्करण
स्विफ्ट 3
override func perform() {
//credits to http://www.appcoda.com/custom-segue-animations/
let firstClassView = self.source.view
let secondClassView = self.destination.view
let screenWidth = UIScreen.main.bounds.size.width
let screenHeight = UIScreen.main.bounds.size.height
secondClassView?.frame = CGRect(x: screenWidth, y: 0, width: screenWidth, height: screenHeight)
if let window = UIApplication.shared.keyWindow {
window.insertSubview(secondClassView!, aboveSubview: firstClassView!)
UIView.animate(withDuration: 0.4, animations: {() -> Void in
firstClassView?.frame = (firstClassView?.frame.offsetBy(dx: -screenWidth, dy: 0))!
secondClassView?.frame = (secondClassView?.frame.offsetBy(dx: -screenWidth, dy: 0))!
}, completion: {(Finished) -> Void in
self.source.navigationController?.pushViewController(self.destination, animated: false)
})
}
}
क्या आप अपने स्टोरीबोर्ड का एक स्क्रीनशॉट और कोड स्निपेट जोड़ सकते हैं जिसे आप 'performSegueWithIdentifier ("showDetail", प्रेषक: स्वयं)' कॉल करने के लिए उपयोग कर रहे हैं? –