/ / एक जेस्चर के साथ नीचे से एक व्यू कंट्रोलर स्लाइडिंग - आईओएस, उद्देश्य-सी, एक्सकोड, व्यू कंट्रोलर, इशारा

एक जेस्चर के साथ नीचे से एक व्यू कंट्रोलर स्लाइडिंग - आईओएस, उद्देश्य-सी, एक्सकोड, व्यू कंट्रोलर, इशारा

मेरे पास एक प्रश्न है (उद्देश्य-सी संबंधित)।

मैं एनोटेशन पर क्लिक करके रूट मैप व्यू कंट्रोलर के शीर्ष पर नीचे व्यू कंट्रोलर से एक स्लाइडिंग बनाना चाहता हूं।

1) एनोटेशन पर क्लिक करने के बाद इसे नीचे से स्लाइड करना चाहिए और ऊंचाई का 10% दिखाएं;
2) ऊपरी स्वाइप जेश्चर के बाद - यदि उपयोगकर्ता इसे पूरी तरह से ऊपर खींचता है तो इसे 100% तक दिखाना चाहिए;
3) नीचे की ओर इशारा करते हुए उपयोगकर्ता को इसकी दृश्य ऊंचाई 10% तक कम करने में सक्षम होना चाहिए;
4) MapView पर नीचे क्लिक करें ViewController छिपाना चाहिए।

मैं प्रक्रिया कार्यान्वयन की दृश्य योजना सहित हूँ।

यहां छवि विवरण दर्ज करें

किसी भी विचार की बहुत सराहना की जाती है!

उत्तर:

उत्तर № 1 के लिए 1

इस डेमो की जांच करें

NHSlidingController

PanningViewController


जवाब के लिए 0 № 2

आप हमेशा ViewControllers के बीच संक्रमण के लिए अपनी खुद की segue एनीमेशन लिखने का प्रयास कर सकते हैं। बस एक कस्टम UIStoryboardSegue बनाओ, और इसकी प्रदर्शन विधि ओवरराइड करें। यहां से शुरू करने के लिए एक स्निपेट है:

@interface HorizontalSegue : UIStoryboardSegue

@property CGPoint originatingPoint;

@end


@implementation VerticalSegue

- (void)perform {
UIViewController *sourceViewController = self.sourceViewController;
UIViewController *destinationViewController = self.destinationViewController;

NSArray* windowArray = [UIApplication sharedApplication].windows;
if (windowArray.count > 0) {
UIWindow* appWindow = [windowArray lastObject];
[appWindow insertSubview:destinationViewController.view aboveSubview:sourceViewController.view];
}
else
[sourceViewController.view addSubview:destinationViewController.view];

// Store original centre point of the destination view
CGPoint originalCenter = destinationViewController.view.center;

// Set center to start point of the button
destinationViewController.view.center = CGPointMake(self.originatingPoint.x, self.originatingPoint.y*3);

[UIView animateWithDuration:0.25
delay:0.0
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
destinationViewController.view.center = originalCenter;
}
completion:^(BOOL finished){
[sourceViewController presentViewController:destinationViewController animated:NO completion:NULL]; // present VC
}];
}

@end

इसका उपयोग करके आप आसानी से कस्टम एनिमेशन बना सकते हैं। मुझे पूरी तरह से यकीन नहीं है कि विंडो में व्यू कंट्रोलर जोड़ने वाला हिस्सा सही है, लेकिन यह ऐसा कुछ है जिसे आप स्वयं को आजमा सकते हैं और जांच सकते हैं।

Segues एनिमेट करने का एक और तरीका CATransition का उपयोग कर रहा है:

-(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 = kCATransitionFromLeft; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom

[destinationController.view.layer addAnimation:transition forKey:kCATransition];
[sourceViewController presentViewController:destinationController animated:NO completion:nil];
}