मैं एक अलग दृष्टिकोण का सुझाव दे सकता हूं जो UISnapBehavior
का अनुमान लगाता है, लेकिन ऑटो लेआउट के साथ यूआईकिट डायनेमिक्स से शादी करने का प्रयास करने से बचाता है जहां आप दृश्य की अंतिम स्थिति निर्धारित करने के लिए ऑटो लेआउट इंजन पर निर्भर हैं। (जाहिर है, अगर आप अंतिम गंतव्य को जानते थे, तो आप ऑटो लेआउट, स्नैप, और स्नैप करने के दौरान निलंबित कर देंगे, फिर आप बाधाओं को लागू करेंगे।)
उछाल प्रभाव के लिए दृश्य के रूप में दृश्य
// create the view
UIView *view = ...;
view.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:view];
// add all of the constraints for the final position
NSDictionary *views = NSDictionaryOfVariableBindings(view);
[self.view addConstraints:...];
// animate the application of those constraints with low `withSpringWithDamping`
[UIView animateWithDuration:1.0 delay:0.0 usingSpringWithDamping:0.5 initialSpringVelocity:0.0 options:0 animations:^{
[view layoutIfNeeded];
} completion:nil];
आप भी कुछ रोटेशन चाहते हैं के रूप में यह जगह में तस्वीरें, आप उपयोग कर सकते हैं animateKeyframesWithDuration
: जगह, आप animateWithDuration
usingSpringWithDamping
साथ पैरामीटर, जैसे उपयोग कर सकते हैं
[UIView animateKeyframesWithDuration:1.0 delay:0.0 options:0 animations:^{
[UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.5 animations:^{
view.transform = CGAffineTransformMakeRotation(M_PI_4/2);
}];
[UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.25 animations:^{
view.transform = CGAffineTransformMakeRotation(-M_PI_4/4);
}];
[UIView addKeyframeWithRelativeStartTime:0.75 relativeDuration:0.125 animations:^{
view.transform = CGAffineTransformMakeRotation(M_PI_4/16);
}];
[UIView addKeyframeWithRelativeStartTime:0.875 relativeDuration:0.125 animations:^{
view.transform = CGAffineTransformMakeRotation(0);
}];
} completion:nil];
यह ठीक UISnapBehavior
नहीं है , लेकिन यह लगभग बारीकी से अनुमान लगाता है। आप मुख्य फ्रेम एनीमेशन के साथ-साथ वसंत नमी कारक में घूर्णन के समय और रोटेशन के साथ भी खेल सकते हैं। लेकिन यह ब्लॉक-आधारित एनीमेशन का उपयोग करके स्नैप-जैसे व्यवहार प्राप्त करने के लिए एक दृष्टिकोण को दर्शाता है।
ऑटो-लेआउट के साथ UIKitDynamics का उपयोग करने के लिए आपको वास्तव में किसी दृश्य पर बाधाओं को अक्षम करने की आवश्यकता नहीं है। एक साफ चाल है जिसने मुझे कुछ समय पहले दिखाया था, कि यदि आप के अनुरूप एक कस्टम NSObject बनाते हैं, तो इस कस्टम आइटम में एक व्यवहार जोड़ें और फिर व्यवहार के क्रिया ब्लॉक में बाधाओं को बदलें। –
DBoyer
यह सही उत्तर है, बाधाओं को एनिमेट करें, फ्रेम नहीं। – Gusutafu