আইফোন - পুরো ইউআই উইন্ডোর মধ্যে ইউআইভিউয়ের অবস্থান পান


206

এর অবস্থান UIViewস্পষ্টতই view.centerবা view.frameইত্যাদি দ্বারা নির্ধারণ করা যেতে পারে তবে এটি কেবল UIViewতার তাত্ক্ষণিক তত্ত্বাবধানের সাথে সম্পর্কিত অবস্থানটি ফিরিয়ে দেয়।

UIViewপুরো 320x480 সমবায় সিস্টেমটিতে আমার অবস্থান নির্ধারণ করতে হবে । উদাহরণস্বরূপ, যদি UIViewএকটি হয় UITableViewCellউইন্ডোর মধ্যে এটি অবস্থান superview এর নাটকীয়ভাবে irregardless পরিবর্তন হতে পারে।

কোনও ধারণা যদি এবং কীভাবে এটি সম্ভব?

চিয়ার্স :)

উত্তর:


339

এটি একটি সহজ:

[aView convertPoint:localPosition toView:nil];

... স্থানীয় স্থানাঙ্ক স্থানের একটি বিন্দুকে উইন্ডো স্থানাঙ্কে রূপান্তরিত করে। উইন্ডো স্পেসে কোনও ভিউর উত্স গণনার জন্য আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন:

[aView.superview convertPoint:aView.frame.origin toView:nil];

2014 সম্পাদনা করুন: ম্যাট__ সি এর মন্তব্যের জনপ্রিয়তার দিকে লক্ষ্য করা যুক্তিযুক্ত যুক্তিসঙ্গত বলে মনে হচ্ছে ...

  1. ডিভাইসটি ঘোরানোর সময় পরিবর্তন করবেন না।
  2. অনারেটেড স্ক্রিনের শীর্ষ বাম কোণে সর্বদা তাদের উত্স থাকে।
  3. হয় উইন্ডোতে স্থানাঙ্ক : তুল্য সিস্টেম IST উইন্ডোর সীমার দ্বারা সংজ্ঞায়িত। স্ক্রিন এবং ডিভাইস সমন্বয় সিস্টেম পৃথক এবং উইন্ডো স্থানাঙ্কের সাথে মিশ্রিত হওয়া উচিত নয়।

দুর্দান্ত :) আমি ভেবেছিলাম এটি সহজ হওয়া উচিত, তবে আমার মনে হচ্ছিল অ্যাপল এটিকে এত সহজ দেবে না ... ভাল তারা করেছে। ধন্যবাদ
লিওর ফ্রেঙ্কেল

41
সচেতন থাকুন যে টুভিউ প্যারামিটারে শূন্য উল্লেখ করা আপনাকে ডিভাইস সমন্বয় দেয়, যা আপনি প্রতিকৃতি নির্দেশে না থাকলে আপনি যা চান তা তা নয়। রূপান্তরদর্শন
ম্যাট__সি

2
এই পদ্ধতিটি aView.frame.originআমার জন্য ফিরতে থাকল । আমার দর্শনের তত্ত্বাবধানে নিজেই কোনও সুপারভিউ নেই তা উপলব্ধি করতে আমার পুরোটা লাগে।
ড্যান আব্রামভ

3
যদি আপনার সুপারভিউতে সুপারভিউ না থাকে আপনার দৃশ্যটি একেবারে দেখা উচিত নয়
user4951

17
আপনার মামলায় @ ম্যাট__ সি লিঙ্কযুক্ত সমাধানটি মানিয়ে নেওয়া, এটি হয়ে যাবে:[view.superview convertPoint:view.frame.origin toView:[UIApplication sharedApplication].keyWindow.rootViewController.view]
ঝিগো


33

এক্সটেনশন সহ সুইফট 3:

extension UIView{
    var globalPoint :CGPoint? {
        return self.superview?.convert(self.frame.origin, to: nil)
    }

    var globalFrame :CGRect? {
        return self.superview?.convert(self.frame, to: nil)
    }
}


9

এখানে @ মোহেনসেমের উত্তরগুলির সংমিশ্রণ এবং সুইচ-এ গৃহীত @ চিগোর একটি মন্তব্য রয়েছে

extension UIView {
    var globalFrame: CGRect? {
        let rootView = UIApplication.shared.keyWindow?.rootViewController?.view
        return self.superview?.convert(self.frame, to: rootView)
    }
}

সহজ এবং সুন্দর!
নাস্তাসিয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.