2012-04-04 11 views
20

मैं एक यूआईएममेज व्यू बना रहा हूं और इसे अपने दृश्य में लूप में जोड़ रहा हूं, मैंने शुरुआती फ्रेम को 0,0,1,47 पर सेट किया है और लूप के प्रत्येक मार्ग को मैं छवि दृश्य के केंद्र को स्थानांतरित करने के लिए बदलता हूं।UIView के मूल संदर्भ को कैसे सेट करें?

मैं हमेशा छवि दृश्य के मध्य में origin.y

समस्या के रूप में उपयोग कर रहा हूँ 0 मूल संदर्भ है, यह मानते हुए हम इंटरफ़ेस बिल्डर में था, यह नीचे दी गई छवि के बराबर है।

मैं कोड में संदर्भ बिंदु कैसे बदल सकता हूं?

enter image description here

+0

क्या आप आईबी में उस लाल चीज को नहीं ले जा सकते हैं? –

+3

हां लेकिन बिंदु था 'मैं कोड में संदर्भ बिंदु कैसे बदल सकता हूं?' – Daniel

उत्तर

41

इन उत्तरों और आपकी टिप्पणियों को पढ़ने के बाद मुझे सच में यकीन नहीं है कि आपका बिंदु क्या है।

आप 2 तरीके से स्थिति सेट कर सकते UIView साथ

:

  • center - यह निश्चित रूप से यह केंद्र है कहते हैं।
  • frame.origin - शीर्ष बाएं कोने, सीधे सेट नहीं किया जा सकता है।

आप नीचे बाएँ कोने एक्स = 300, वाई = 300 पर तुम सिर्फ यह कर सकते हैं होना चाहते हैं:

UIView *view = ... 
CGRect frame = view.frame; 
frame.origin.x = 300 - frame.size.width; 
frame.origin.y = 300 - frame.size.height; 
view.frame = frame; 

लेकिन आप की जादुई दुनिया के लिए एक स्तर गहराई में जाने अगर CALayers (डॉन 'क्वार्ट्जकोर आयात करना भूल जाते हैं), आप अधिक शक्तिशाली हैं।

CALayer इन है:

  • position - तुम देखो, यह स्पष्ट रूप कहते हैं नहीं है 'केंद्र', तो यह केंद्र नहीं हो सकता है!
  • anchorPoint - CGPoint रेंज 0..1 (सहित) में मूल्यों के साथ कि दृश्य के अंदर बिंदु निर्दिष्ट करता है। डिफ़ॉल्ट x = 0.5 है, y = 0.5 जिसका अर्थ है 'केंद्र' (और -[UIView center] इस मान को मानता है)। आप इसे किसी भी अन्य मूल्य पर सेट कर सकते हैं और उस बिंदु पर position संपत्ति लागू की जाएगी।

उदाहरण समय:

  1. आप आकार के साथ एक दृश्य है 100x100
  2. view.layer.anchorPoint = CGPointMake(1, 1);
  3. view.layer.position = CGPointMake(300, 300);
  4. देखने के ऊपरी बाएं कोने की एक्स = 200, y = 200 और पर है इसके निचला दायां कोने x = 300, y = 300 पर है।

नोट: जब आप परत बारी बारी/देखने यह anchorPoint चारों ओर घुमाया जाएगा, जो डिफ़ॉल्ट रूप से केंद्र है।

बू के बाद से आप सिर्फ कैसे पूछना विशिष्ट बात करने के लिए और नहीं क्या हासिल करना चाहते हैं, मैं तुम्हें किसी भी आगे अब मदद नहीं कर सकता।

+1

जब मैंने यह पूछा तो मैं बहुत उलझन में था। संक्षेप में, एक्सकोड की आईबी सुविधा आप एक उपयोगी पैनल के साथ एक UIView के मीट्रिक सेट कर सकते हैं, पिक्सेल मान सेट कर सकते हैं, लेकिन आप केंद्र से, शीर्ष मध्य, शीर्ष दाएं, नीचे बाएं, आदि के संदर्भ बिंदु भी बदल सकते हैं ...और इससे मुझे लगता है कि मैं इसे कोड में किसी भी तरह से कर सकता था, लेकिन अगर यह ऐप्पल के एक्सकोड में उलझन में नहीं आ रहा है तो यह केवल यूआई सहायक था ... – Daniel

+1

मुझे याद है कि पूरा बिंदु दाईं ओर एक सबव्यू को संरेखित करने के लिए एक आसान और तेज़ तरीका था , मूल को सही केंद्र पर सेट करके, और उसके बाद मूल्य को उसके माता-पिता की चौड़ाई देकर। इसका अर्थ है चौड़ाई कमजोर बच्चे की चौड़ाई इत्यादि की गणना गणित करने की आवश्यकता को छोड़कर – Daniel

+0

आप आसानी से 'फ्रेमबॉर्डरफ्ट 'या' फ्रेमऑरिगिन 'जैसी गुणों के साथ' यूआईवी व्यू 'पर एक सीटगोरी बना सकते हैं और मैन्युअल रूप से उन एक्सेसर्स को लागू कर सकते हैं। तो आपके पास यह आसान है। – Tricertops

2

मैं तुम्हें सही ढंग से समझ रहा हूँ, तो आप छवि दृश्य आपको बढ़ने में रुचि रखते हैं के फ्रेम सेट करना होगा। यह इस तरह के साधारण मामले में किया जा सकता है:

_theImageView.frame = CGRectMake(x, y, width, height); 

स्पष्ट रूप से आपको एक्स, वाई, चौड़ाई और ऊंचाई सेट करने की आवश्यकता है। कृपया यह भी ध्यान रखें कि एक दृश्य का फ्रेम इसके मूल दृश्य के संदर्भ में है। इसलिए, यदि आपके पास कोई दृश्य है जो शीर्ष बाएं कोने में है (x = 0, y = 0), और 320 अंक चौड़ा और 400 अंक लंबा है, और आप छवि दृश्य का फ्रेम सेट (10, 50, 100, 50) और उसके बाद इसे पिछले दृश्य के सबव्यूव के रूप में जोड़ें, यह मूल दृश्य के समन्वय स्थान के x = 10, y = 50 पर बैठेगा, भले ही छवि दृश्य की सीमाएं x = 0, y = 0 हों बाउंड दृश्य के संदर्भ में हैं, फ्रेम माता-पिता के संदर्भ में है।

तो, अपने परिदृश्य में, अपने कोड निम्नलिखित की तरह कुछ दिख सकता है:

CGRect currentFrame = _theImageView.frame; 
currentFrame.origin.x = 0; 
currentFrame.origin.y = 0; 
_theImageView.frame = currentFrame; 

[_parentView addSubview:_theImageView]; 

वैकल्पिक रूप से, आप कह सकते हैं:

CGRect currentFrame = _theImageView.frame; 
_theImageView.frame = CGRectMake(0, 0, currentFrame.size.width, currentFrame.size.height); 

[_parentView addSubview:_theImageView]; 

या तो दृष्टिकोण शीर्ष बाईं ओर छवि दृश्य सेट हो जाएगा माता-पिता का आप इसे जोड़ते हैं।

+1

हाय समस्या यह है कि मूल बिंदु उस दृश्य के पूर्ण केंद्र पर सेट है, मुझे इसे शीर्ष बाईं ओर बदलने की आवश्यकता है। – Daniel

+0

जैसा कि मैंने ऊपर बताया है, आपको बस छवि दृश्य के एक्स और वाई को 0, 0 पर सेट करने की आवश्यकता होगी। यह इसे अपने मूल दृश्य के 0, 0 पर रखेगा। – jmstone617

+1

मुझे वास्तव में जरूरी है कि दृश्य के आकार के बारे में चिंता किए बिना मेरे विचार की उत्पत्ति को ज्ञात बिंदु पर सेट किया जाए। – Daniel

7

ऑब्जेक्ट के फ्रेम में इसके पर्यवेक्षण में इसकी स्थिति शामिल है। आप इसे कुछ के साथ बदल सकते हैं जैसे:

CGRect frame = self.imageView.frame; 
frame.origin.y = 0.0f; 
self.imageView.frame = frame; 
+1

हाय, प्रश्न इतना नहीं है कि फ्रेम को कैसे बदला जाए, यह मूल के संदर्भ बिंदु को कैसे बदला जाए। वर्तमान में y = 0 को सेट करने का अर्थ है दृश्य का केंद्र y = 0 पर रखा गया है, शीर्ष – Daniel

+0

जब आप मूल कहें, तो आप किस मूल के बारे में बात कर रहे हैं? फ्रेम की उत्पत्ति। ऑफ ऑफसेट पर्यवेक्षण के भीतर अपने शीर्ष की स्थिति है। एक दृश्य के लिए एक 'केंद्र' संपत्ति है लेकिन मुझे किसी भी दृश्यमान संदर्भ बिंदु के बारे में पता नहीं है। –

+1

उत्पत्ति संभवत: मेरे आईबी में देखने के लिए सबसे अच्छा शब्द नहीं है, आप आईबी में देखते हैं, आप ऊपर बाईं ओर से मूल संदर्भ बिंदु बदल सकते हैं, केंद्र, या नीचे मध्य, या केंद्र सही कह सकते हैं ... मैंने जो छवि संलग्न की है उसे देखें। खैर मैंने कोड में एक दृश्य जोड़ा, और मैं मूल दृश्य के शीर्ष पर मूल (निर्देशांक) सेट करना चाहता था, इसलिए कहें कि मेरे पास y = 0 होगा। हालांकि ऐसा लगता है कि मेरे विचार का मूल संदर्भ बिंदु शीर्ष बाईं ओर सेट नहीं है जैसा कि डिफ़ॉल्ट लगता है, लेकिन यह केंद्र पर सेट है (छवि देखें)। इसलिए जब मैं y = 0 सेट करता हूं, तो दृश्य केवल उस आधे हिस्से को दिखा रहा है क्योंकि उस दृश्य के केंद्र को y = 0 – Daniel

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