আইফোন ইউআইভিউ জেড সূচক কীভাবে সেট করবেন?


252

আমি একটি দৃশ্যের অপর উপরে সরাতে চাই, আমি কীভাবে দর্শনটির জেড সূচক জানতে পারি এবং কীভাবে শীর্ষে যেতে পারি?

উত্তর:


279

UIViewভাইবোনরা যাতে তাদের তত্ত্বাবধানে যুক্ত হয় সেই ক্রমে স্ট্যাক করা হয়। UIViewঅনুক্রমের পদ্ধতি এবং বৈশিষ্ট্য দেখতে অর্ডার পরিচালনা করতে আছে। ইউআইভিউ র মধ্যে:

@property(nonatomic,readonly) UIView *superview;
@property(nonatomic,readonly,copy) NSArray *subviews;

- (void)removeFromSuperview;
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;

- (void)addSubview:(UIView *)view;
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;

- (void)bringSubviewToFront:(UIView *)view;
- (void)sendSubviewToBack:(UIView *)view;

ভাইবোনদের মতামতগুলি subviewsঅ্যারেতে আবার সামনে অর্ডার করা হয় । সুতরাং শীর্ষতম দৃশ্যটি হবে:

[parentView.subviews lastObject];

এবং নীচের দৃশ্যটি হবে:

[parentView.subviews objectAtIndex:0];

কোলিন ক্রেইনকেল যেমন বলেছিলেন, [parentView bringSubviewToFront:view]দৃষ্টিভঙ্গিটিকে শীর্ষে এনে দেবে, তবে কেবলমাত্র যদি দৃষ্টিভঙ্গি বংশোদ্ভূত সমস্ত ভাইবোন হয়।


329

ভিউটির জেড-ইনডেক্স পরিবর্তন করতে আপনি ভিউর zPositionলেয়ারের সম্পত্তিটি (এটি কোনও CALayerঅবজেক্ট) ব্যবহার করতে পারেন ।

theView.layer.zPosition = 1;

যেমনটি ভিক্টর নর্ডলিং যোগ করেছেন, "বড় মানগুলি শীর্ষে রয়েছে negative নেতিবাচক মান সহ আপনি যে কোনও মান আপনার পছন্দ করতে পারেন।" ডিফল্ট মান 0 হয়।

স্তরটি অ্যাক্সেস করতে আপনার কোয়ার্টজোর ফ্রেমওয়ার্কটি আমদানি করতে হবে। আপনার বাস্তবায়ন ফাইলের শীর্ষে কোডের এই লাইনটি যুক্ত করুন।

#import "QuartzCore/QuartzCore.h"

7
একজন সহায়ক হিসাবে, বড় মানগুলি "শীর্ষে"। নেতিবাচক মান সহ আপনি যে কোনও মান ব্যবহার করতে পারেন।
ভিক্টর নর্ডলিং

12
আপনি যদি নিজের দৃষ্টিভঙ্গি সর্বদা শীর্ষে থাকতে চান তবে এই সমাধানটি আরও ভাল। কেবলমাত্র MAXFLOAT এ zPosition সেট করুন
মুহাম্মদ হাসান নসর

27
আমি কেবল শিখেছি যে স্তরটির জেডপজিশন এবং ইউআইভিউ'র ইনপুট হ্যান্ডলার দুটি পৃথক পৃথক জেড-অর্ডারে রয়েছে। আপনার ক্লিকগুলি "এর মধ্য দিয়ে যেতে" যখন সত্যই অদ্ভুত
স্টিফেন জে

zPositionকাজ করার জন্য দর্শনগুলির তত্ত্বাবধানে কি একই রকম হওয়া উচিত ?
হ্লুং

3
আমি লক্ষ্য করেছি যে ভিউ শীর্ষে থাকলেও ক্লিকগুলি নীচের বস্তুগুলিতে যায়। এটি একটি বাগ হিসাবে বিবেচনা করা উচিত। আমি নীচে ঘটতে পারে এমন কোনও মতামতের ব্যবহারকারীর ইন্টারঅ্যাকশন স্পষ্টভাবে অক্ষম না করেই সমস্যাটি এড়ানোর একটি সাধারণ উপায় সন্ধান করার চেষ্টা করছি।
ব্রুস প্যাটিন

103

আইবি এবং সুইফট

প্রবাহিত বিন্যাস দেওয়া যেখানে হলুদ হল তত্ত্বাবধান এবং লাল, সবুজ এবং নীল হলুদ বর্ণের ভাইবোন সাবভিউগুলি,

মতামত - উপরে লাল দেখুন

লক্ষ্যটি হল একটি সাবভিউ (শীর্ষে সবুজ বলা যাক) শীর্ষে নিয়ে যাওয়া।

মতামত - উপরে সবুজ ভিউ

ইন্টারফেস বিল্ডারে

ইন্টারফেস বিল্ডারে আপনাকে যা করতে হবে তা হ'ল ডকুমেন্টস আউটলাইনে তালিকার নীচের অংশে আপনি যে ভিউটি প্রদর্শন করতে চান তা টেনে আনুন।

ইন্টারফেস বিল্ডারে দর্শনের ক্রম

বিকল্পভাবে, আপনি দৃশ্যটি নির্বাচন করতে পারেন এবং তারপরে মেনুতে সম্পাদক> সাজানো> সম্মুখস্থ প্রেরণে যান ।

সুইফটে

প্রোগ্রামভিত্তিকভাবে এটি করার বিভিন্ন উপায় রয়েছে।

পদ্ধতি 1

yellowView.bringSubviewToFront(greenView)
  • এই পদ্ধতিটি উপরের আইবি উত্তরের প্রোগ্রামেটিক সমতুল্য।

  • এটি কেবল তখনই কাজ করে যদি পর্যালোচনাগুলি একে অপরের ভাইবোন হয়।

  • সাবউভিউগুলির একটি অ্যারে এতে অন্তর্ভুক্ত রয়েছে yellowView.subviews। এখানে, সূচক থেকে bringSubviewToFrontসরানো হয় । এটি সঙ্গে পর্যবেক্ষণ করা যেতে পারেgreenView02

      print(yellowView.subviews.indexOf(greenView))

পদ্ধতি 2

greenView.layer.zPosition = 1
  • এই পদ্ধতিটি কেবল z- অক্ষের উপরে স্তরটির উচ্চতর অবস্থান (ব্যবহারকারীর কাছাকাছি) সরিয়ে দেয়। যেহেতু ডিফল্ট 0অন্যান্য সমস্ত দর্শনের জন্য, ফলাফলটি greenViewএটির মতো দেখতে দেখতে শীর্ষে রয়েছে। যাইহোক, এটা এখনও সূচিতে রয়ে 0এর yellowView.subviewsঅ্যারে। এটি কিছু অপ্রত্যাশিত ফলাফলের কারণ হতে পারে, কেননা ট্যাপ ইভেন্টের মতো জিনিসগুলি এখনও সর্বোচ্চ সূচীর সংখ্যা সহ দর্শনায় প্রথম যাবে। যে কারণে উপরের পদ্ধতি 1 এর সাথে যাওয়া আরও ভাল।
  • zPositionসেট করা যেতে পারে CGFloat.greatestFiniteMagnitude( CGFloat(FLT_MAX)সুইফট এর পুরোনো সংস্করণগুলি মধ্যে) তা নিশ্চিত করতে উপরে হয়।

এর জন্য ধন্যবাদ ... আমি এটি বের করার চেষ্টা করে 8 ঘন্টা ব্যয় করেছি ইয়েলোভিউ.ব্রিংসউবিউটিওফ্রন্ট (গ্রিনভিউ) পুরোপুরি কাজ করেছে।
মিজআকিটা

মজার বিষয়, ধারক দর্শনগুলি এটি সম্মান করে না! আপনাকে সেগুলি ম্যানুয়ালি কোডে সরিয়ে নিতে হবে, মনে হয়।
ফ্যাটি


19

আপনি যদি এক্সকোডের ইন্টারফেস বিল্ডারের মাধ্যমে এটি করতে চান তবে আপনি সম্পাদক-> ব্যবস্থাপনার অধীনে মেনু বিকল্পগুলি ব্যবহার করতে পারেন। সেখানে আপনি "সামনের দিকে প্রেরণ করুন", "পিছনে প্রেরণ করুন" ইত্যাদি পাবেন


অ্যারেঞ্জ থেকে বিকল্পগুলি অক্ষম থাকলে কী হবে?
এমআর 5


4

আপনি যদি কোকোস 2 ডি ব্যবহার করছেন তবে আপনি [পিতামাতাভিউ নিয়ে আসুনসুবিউটিওফ্রন্ট: দেখুন] এর সাথে একটি সমস্যা দেখতে পাবেন, কমপক্ষে এটি আমার পক্ষে কাজ করছে না। আমি যে ভিউটি সামনে চেয়েছিলাম তা না নিয়ে আমি অন্যান্য মতামতগুলি আবার পাঠিয়েছি এবং এটি কৌশলটি করেছে।

[[[CCDirector sharedDirector] view] sendSubviewToBack:((UIButton *) button)]; 

2

আমরা আইওএসে জেডপজিশন ব্যবহার করতে পারি

আমাদের যদি সেলুনডেটল ভিউ নামের মতামত থাকে তবে :@IBOutlet weak var salonDetailView: UIView!

আমার ক্ষেত্রে চিত্রটি দেখুন

এবং জিএমএসম্যাপভিউয়ের জন্য ইউআইভিউ রয়েছে যেমন:@IBOutlet weak var mapViewUI: GMSMapView!

দৃশ্য দেখানোর জন্য salonDetailView উপরের mapViewUI

নীচের হিসাবে zPosition ব্যবহার করুন

salonDetailView.layer.zPosition = 1

ওপি এর পক্ষে এটি সহজতর করার জন্য দয়া করে আপনার উত্তরে সরাসরি ফটো এবং কোড পোস্ট করুন।
skratchi.at

শিক্ষানবিস হিসাবে, স্ট্যাকওভারফ্লো আমাকে দুঃখিত করতে অনুমতি দেবে না। আপনি সমস্যার চিত্রটি পরীক্ষা করতে পারেন i.stack.imgur.com/d9Cx3.png
k

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