सवाल अभिभावक UIView के अंदर सापेक्ष स्थिति प्राप्त करने के लिए कन्वर्टपॉइंट का उपयोग करना


मैंने इस विषय पर एक दर्जन SO प्रश्नों को देखा है, और किसी भी उत्तर ने मेरे लिए काम नहीं किया है। शायद यह मुझे सही रास्ते पर वापस लाने में मदद करेगा।

इस सेटअप की कल्पना करो:

enter image description here

मैं प्राप्त करना चाहता हूँ center UIView के सापेक्ष UIButton के निर्देशांक।

दूसरे शब्दों में, UIButton केंद्र UITableViewCell के भीतर 215, 80 हो सकता है, लेकिन UIView के सापेक्ष वे 260, 165 की तरह होना चाहिए। मैं दोनों के बीच कैसे परिवर्तित करूं?

मैंने जो कोशिश की है वह यहां है:

[[self.view superview] convertPoint:button.center fromView:button];  // fail
[button convertPoint:button.center toView:self.view];  // fail
[button convertPoint:button.center toView:nil];  // fail
[button convertPoint:button.center toView:[[UIApplication sharedApplication] keyWindow]];  // fail

मैं बटन के सभी पर्यवेक्षकों के माध्यम से लूप करके और एक्स और वाई निर्देशांक जोड़कर इसे कठिन तरीके से कर सकता हूं, लेकिन मुझे संदेह है कि यह अधिक है। मुझे सिर्फ covertPoint सेटिंग्स का सही संयोजन खोजने की आवश्यकता है। सही?


44
2018-04-08 15:37


मूल


यदि आप अपने प्रश्न में निम्नलिखित जोड़ते हैं तो यह आपकी सहायता करेगा: आपकी छवि में सभी 4 विचारों के फ्रेम, आपके द्वारा किए गए तरीकों से प्राप्त आउटपुट, और वह मूल्य जो आप वास्तव में चाहते हैं। - rmaddy


जवाब:


button.center समन्वय प्रणाली के भीतर निर्दिष्ट केंद्र है इसका पर्यवेक्षण, तो मैं मान लें कि निम्नलिखित कार्य करता है:

CGPoint p = [button.superview convertPoint:button.center toView:self.view]

या आप बटन के केंद्र की अपनी समन्वय प्रणाली में गणना करते हैं और इसका उपयोग करते हैं:

CGPoint buttonCenter = CGPointMake(button.bounds.origin.x + button.bounds.size.width/2,
                                   button.bounds.origin.y + button.bounds.size.height/2);
CGPoint p = [button convertPoint:buttonCenter toView:self.view];

स्विफ्ट 4

var p = button.convert(button.center, to: self.view)

96
2018-04-08 15:45



बिंगो! आपका पहला प्रयास वह था जिसे मैं ढूंढ रहा था। पर्यवेक्षण की समन्वय प्रणाली से जुड़ा केंद्र वह है जो मैं खो रहा था। धन्यवाद! - Axeva
धन्यवाद @ मार्टिन आर। यह सहायक था - Chamath Jeevan
स्विफ्ट 3:  var buttonCenter = CGPoint(x: button.bounds.origin.x + button.bounds.size.width / 2, y: button.bounds.origin.y + button.bounds.size.height / 2) var p = button.convertPoint(buttonCenter, to: self.view) - Matt Butler


मार्टिन जवाब सही है। स्विफ्ट का उपयोग कर डेवलपर्स के लिए, आप स्क्रीन के सापेक्ष किसी ऑब्जेक्ट (बटन, व्यू, ...) की स्थिति प्राप्त कर सकते हैं:

var p = obj.convertPoint(obj.center, toView: self.view)

println(p.x)  // this prints the x coordinate of 'obj' relative to the screen
println(p.y)  // this prints the y coordinate of 'obj' relative to the screen

11
2017-11-19 07:01



@ एक्सेवा भी एक है convertRect अधिक सटीक गणना के लिए यहाँ - Juan Boero


यहाँ है स्विफ्ट 3 @ पाब्लो के जवाब का अपडेट, जिसने मेरे मामले में बहुत अच्छा काम किया।

if let window = UIApplication.shared.keyWindow {
    parent.convert(child.frame.origin, to: window)
}

4
2018-03-07 19:48





स्विफ्ट 4 

 आपको कॉल करने की ज़रूरत है convert बटन से, पर्यवेक्षक नहीं। मेरे मामले में मुझे चौड़ाई डेटा की आवश्यकता थी इसलिए मैंने केवल केंद्र बिंदु की बजाय सीमाएं परिवर्तित कीं। नीचे दिया गया कोड मेरे लिए काम करता है:

let buttonAbsoluteFrame = button.convert(button.bounds, to: self.view)

3
2018-02-26 21:24





तेजी से 2.2 में मेरे लिए काम किया:

var OrignTxtNomeCliente:CGPoint!

if let orign = TXT_NomeCliente.superview, let win = UIApplication.sharedApplication().keyWindow {
        OrignTxtNomeCliente = orign.convertPoint(TXT_NomeCliente.frame.origin, toView: win)
    }

1
2018-05-05 14:28