2014-07-07 8 views
5

मेरे पास ऑटोलाउट का उपयोग करके UITableViewCell सबक्लास सेट किया गया है, और मुझे एक छोटी सी एनीमेशन चाहिए जिसमें छवि दृश्य बदलता है, थोड़ा बढ़ता है और वापस घूमता है।अस्थायी रूप से NSLayoutConstraint को हटा दें?

वर्तमान में, बाधाओं के कारण, छवि के दाहिने तरफ के लेबल भी चल रहे हैं (जैसा कि वे होना चाहिए)।

मैं अस्थायी रूप से कहने के लिए एक त्वरित और आसान माध्यम चाहता हूं कि "उन लेबल को छोड़ दें जहां वे वर्तमान में यह एनीमेशन चल रहे हैं"। क्या वह कुछ है जो मैं उन बाधाओं को हटाने और फिर से जोड़ने की आवश्यकता के बिना कर सकता हूं, जो बहुत परेशानी है?

उत्तर

1

"इन विचारों को यहां छोड़ दें" कहने के लिए कोई एपीआई नहीं है, अस्थायी रूप से ऑटोलाउट के कुछ हिस्सों को अक्षम कर रहा है। वहाँ कई संभव समाधान हैं:

  • एनीमेशन
  • के दौरान अपने बाधाओं को दूर अलग ढंग से अपने बाधाओं की व्यवस्था (उन्हें, छवि को देखने के एक superview करने के उदाहरण के लिए, या उन्हें होने ही छवि दृश्य के केन्द्र पर निर्भर)
  • एक कंटेनर को देखने के ओवरराइड layoutSubviews अपने लेबल वापस जहाँ आप उन्हें चाहते हैं चलाने autolayout रहना के बाद autolayout [super layoutSubviews] में चलाता है (या अपनी छवि को देखने के बदलने निकालने के लिए, और फिर इसे वापस डाल)
  • उपवर्ग अपनी छवि देख सकते हैं और ओवरराइड frameForAlignmentRect: और alignmentRectForFrame: संरेखण उद्देश्यों के लिए untransformed फ्रेम का उपयोग करने के लिए autolayout प्राप्त करने के लिए।

अधिक जानकारी और सुझावों जवाब यहां में उपलब्ध हैं, जो कैसे रूपांतरण बनाने के लिए और autolayout एक साथ खेलते हैं की एक ऐसी ही सवाल यह है: How do I adjust the anchor point of a CALayer, when Auto Layout is being used?

+0

यह एक बढ़िया जवाब है, लेकिन शुक्र है मैं इसे जरूरत नहीं थी। मैंने UIView एनीमेशन के स्थान पर 'CABasicAnimation' का उपयोग किया, क्योंकि वे लेआउट परिवर्तनों को ट्रिगर नहीं करते हैं। – Luke

+1

@ ल्यूकेक यह एक विकल्प है, लेकिन सावधान रहें, जैसे कि आपकी एनीमेशन के दौरान कोई और लेआउट का कारण बनता है, तो आप उसी बग पर वापस आ जाएंगे जिसके साथ आपने शुरुआत की थी। –

5

iOS 8 में शुरू NSLayoutConstraints अब एक active संपत्ति है कि आप कर सकते हैं myConstraint.active = NO; बदलें। इस बाधा को दूर करता, YES को यह मूल्य सेट करते समय [फिर] जोड़ देगा:

सक्रिय कर रहा है या बाधा निष्क्रिय addConstraint कॉल: और removeConstraint: राय यह है कि कामयाब आइटम के निकटतम आम पूर्वज है पर इस बाधा से। कॉलिंग के बजाय इस संपत्ति का उपयोग करें addConstraint: या हटाएं कॉन्स्ट्रेन: सीधे। source

इसके अतिरिक्त, दो नए वर्ग तरीकों activateConstraints: और deactivateConstraints: कि बाधाओं (NSArray<NSLayoutConstraint>) की एक सरणी ले, खासकर यदि आप बाधाओं के साथ एक IBOutletCollection है कर रहे हैं, ताकि सहायक हो सकता है।

[NSLayoutConstraint deactivateConstraints:myConstraints];

संबंधित मुद्दे