के साथ मॉडलिंग व्यू को केंद्रित करना मैं एक फेसबुक पीओपी एनिमेटेड संक्रमण को लागू करने के प्रयास में वर्तमान दृश्य नियंत्रक और एक कस्टम मोडल प्रस्तुति स्टाइल का उपयोग कर एक UIViewController प्रस्तुत कर रहा हूं।ऑटोलायआउट
मोडल दृश्य पूरी तरह से गतिशील है, कोड में ऑटोलायआउट बाधाओं का उपयोग करके परिभाषित किया गया है। मोडल को वापस करने के लिए कोई xib/storyboard नहीं है।
मुझे स्क्रीन पर केंद्र के लिए मोडल दृश्य नहीं मिल सकता है! Autolayout पर्याप्त नहीं है, क्योंकि बाधाओं को जोड़ने के लिए कोई पर्यवेक्षण नहीं है!
मेरे पेश कोड इस (एक अमेरिकन प्लान पॉप कोड नमूना से लिया गया) की तरह दिखता है:
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext
{
UIView *fromView = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey].view;
fromView.tintAdjustmentMode = UIViewTintAdjustmentModeDimmed;
fromView.userInteractionEnabled = NO;
UIView *dimmingView = [[UIView alloc] initWithFrame:fromView.bounds];
dimmingView.backgroundColor = [UIColor colorWithRed:(24/255.0) green:(42/255.0) blue:(15/255.0) alpha:1.0];
dimmingView.layer.opacity = 0.0;
UIView *toView = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey].view;
toView.frame = CGRectMake(0,
0,
CGRectGetWidth(transitionContext.containerView.bounds) - 104.f,
CGRectGetHeight(transitionContext.containerView.bounds) - 320.f);
toView.center = CGPointMake(transitionContext.containerView.center.x, -transitionContext.containerView.center.y);
[transitionContext.containerView addSubview:dimmingView];
[transitionContext.containerView addSubview:toView];
POPSpringAnimation *positionAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerPositionY];
positionAnimation.toValue = @(transitionContext.containerView.center.y);
positionAnimation.springBounciness = 10;
[positionAnimation setCompletionBlock:^(POPAnimation *anim, BOOL finished) {
[transitionContext completeTransition:YES];
}];
POPSpringAnimation *scaleAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
scaleAnimation.springBounciness = 20;
scaleAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(1.2, 1.4)];
POPBasicAnimation *opacityAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerOpacity];
opacityAnimation.toValue = @(0.2);
[toView.layer pop_addAnimation:positionAnimation forKey:@"positionAnimation"];
[toView.layer pop_addAnimation:scaleAnimation forKey:@"scaleAnimation"];
[dimmingView.layer pop_addAnimation:opacityAnimation forKey:@"opacityAnimation"];
}
इस खूबसूरती से काम करता है, लेकिन मैं वास्तविक दृश्य आकार की जरूरत है गतिशील होने के लिए (कभी कभी मोडल होगा पाठ की चार पंक्तियां और दो बटन, आदि)। इसे पूरा करने के लिए, मुझे वीसी सबक्लास में अनुवादों को सेट करने की आवश्यकता है। AutoresizingMaskIntoConstraints = NO। यह स्पष्ट रूप से प्रस्तुति एनिमेटर में कर रहे फ्रेम केंद्र को अस्वीकार करता है।
अंतिम परिणाम एक मॉडल है जो स्क्रीन के बाएं किनारे पर फंस गया है; उत्सुकता से, यह लंबवत रूप से केंद्रित है, लेकिन क्षैतिज नहीं है। दिखने में, यह कुछ इस तरह दिखता (काले वर्गों क्षमा, मैं कानूनी प्रयोजनों के लिए करना था):
स्पष्ट समाधान के लिए एक दृश्य बाधा दृश्य केन्द्रों कि जोड़ने के लिए किया जाएगा। कोई समस्या नहीं, है ना?
लेकिन मैं इसे कहां जोड़ूं? देखें। सुपरव्यू शून्य है; कोई पर्यवेक्षण नहीं है। मैंने कस्टम 'पर्यवेक्षण' प्रॉपर्टी बनाने और इसे सेट करने का प्रयास किया, लेकिन ऑटोलाउटआउट यह नहीं जानता कि दृश्य को पदानुक्रम (प्रस्तुत करने वाला वीसी) के बाहर एक दृश्य को कैसे संभाला जाए। यह मेरे विचार पदानुक्रम, कैसा दिखता एनोटेट है:
आप जाहिरा तौर पर सीधे UITransitionView उपयोग करने के लिए नहीं करना पड़ेगा। UIWindow पर बाधाओं का कोई प्रभाव नहीं पड़ता है।
क्या किसी के पास कोई सलाह है? आप इस तरह की चीज़ों को कैसे संभालेंगे?
मैं वास्तव में के लिए समाधान की जरूरत नहीं है आप लेकिन मैं आपको बताता हूं कि मैं इस स्थिति में क्या करूँगा: ** किसी भी Autolayout ** पर टिप्पणी करें, ** सीजीआरईटीएमके के माध्यम से स्थिति सेट करें (**। एक और बात: जिस तरीके से आपने इस सवाल को संरचित किया है, यह कहने में मुश्किल है कि कहां समस्या है। शुभकामनाएं। – carlodurso
यह कैच -22 है। मुझे ऑटो लेआउट का उपयोग करने की आवश्यकता है, क्योंकि दृश्य को पूरी तरह से गतिशील होना चाहिए। – cdstamper