ইউআইআইমেজভিউতে কর্নার ব্যাসার্ধ নির্ধারণ কাজ করছে না


129

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

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

static NSString *CellIdentifier = @"MyTableViewCell";

MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
    cell = [topLevelObjects objectAtIndex:0];
    cell.previewImage.layer.cornerRadius = 20; //Made it 20 to make sure it's obvious.
}

আমার যে অনুপস্থিতি কোষগুলি লোড হচ্ছে সে সম্পর্কে কিছু আছে?

উত্তর:


377

আপনাকে স্তরের masksToBoundsসম্পত্তিটি সেট করতে হবে YES:

cell.previewImage.layer.masksToBounds = YES;

এটি কারণ হ'ল UIImageViewনিয়ন্ত্রণটি UIImageবস্তুটি ধরে রাখতে সিউডো-সাবভিউ তৈরি করে ।


19
আপনি যদি ভিউটিকে (ভিউ.লেয়ার.শোল্ডারাস্টারাইজ = ইয়েস) রাস্টারাইজ না করেন তবে প্রতিটি ফ্রেমের জন্য সমস্ত পিক্সেলের একটি পুনরায় মাস্ক লাগবে।
jjxtra

@jjxtra তাই সেট করা ভাল shouldRasterize = false?
ব্যবহারকারী924

যদি shouldRasterize মিথ্যা হয় তবে আপনি মাস্ক তৈরির উপর দিয়ে ওভারহেডের প্রতিটি ফ্রেম প্রদান করুন। যদি shouldRasterize সত্য হয় এবং আপনার স্তর প্রতিটি ফ্রেম পরিবর্তন করে, আপনি মাস্ক ওভারহেড এবং রাস্টারাইজেশন ওভারহেড প্রদান করুন pay আদর্শ কেসটি স্ট্যাডিক (খুব ঘন ঘন পরিবর্তিত হয় না) shouldRasterize = সত্য সহ layer
jjxtra

30

এটিও লক্ষণীয়

  1. আপনি যদি ক্লিপটোবাউন্ডস / মাস্কস টোবাউন্ডস সহ অ্যাসপেক্টফিট এবং কর্নার রেডিও ব্যবহার করছেন তবে আপনি বৃত্তাকার কোণগুলি পাবেন না।

অর্থাত্ যদি আপনার এটি থাকে

theImageView.contentMode = .scaleAspectFit

এবং

   theImageView.layer.cornerRadius = (theImageView.frame.size.height)/2
    theImageView.clipsToBounds = true

অথবা

theImageView.layer.masksToBounds = true

এটি কাজ করবে না । আপনাকে অ্যাসপেক্টফিট কোড থেকে মুক্তি দিতে হবে

//theImageView.contentMode = .scaleAspectFit
  1. চিত্রের দৃশ্যের প্রস্থ এবং উচ্চতা সমান কিনা তা নিশ্চিত করুন

সংক্ষেপে: অ্যাসপেক্ট অনুপাত 1: 1 সেট করুন যদি আপনি AspectFit ব্যবহার করতে চান
djdance

22

এই কাজ করা উচিত

cell.previewImage.clipsToBounds = YES;

cell.previewImage.layer.cornerRadius = 20;

3
clipsToBoundsপরবর্তী ক্লাসে একটি পদ্ধতি নিশ্চিত না is বিশ্বাস করুন এটি masksToBoundsউপরে হিসাবে আছে।
অ্যালফি হ্যানসেন

4
@ অ্যালফিহানসান স্তরগুলির মুখোশ রয়েছে টোবাউন্ডস :, ভিউগুলি ক্লিপটোবাউন্ডস রয়েছে:
কেভিন


4

এক্সকোড ইন্টারফেস বিল্ডারে, কোডের কোণার ব্যাসার্ধটি নির্ধারণের সাথে দৃশ্যের জন্য 'ক্লিপ সাবভিউ' অঙ্কনের বৈশিষ্ট্যটি নির্বাচন করা cell.previewImage.layer.cornerRadius = 20;আমার পক্ষে কাজ করে!

আইবিতে 'ক্লিপ সাবভিউ' বিকল্পটি দেখুন


2

কোডের টুকরোটির নীচে এটি ব্যবহার করে দেখুন

cell.previewImage.layer.cornerRadius = 20;
cell.previewImage.clipsToBounds = YES;

2

এই কোডটি ব্যবহার করে দেখুন: -

self.imgaviewName.clipsToBounds = true
self.imageviewName.layer.cornerRadius = 10

কোড-কেবল উত্তরগুলি নিরুৎসাহিত করা হয়। দয়া করে সম্পাদনাতে ক্লিক করুন এবং আপনার কোড কীভাবে প্রশ্নটিকে সম্বোধন করে তা সংক্ষেপ করে কিছু শব্দ যুক্ত করুন বা সম্ভবত আপনার উত্তরটি পূর্ববর্তী উত্তর / উত্তরগুলির থেকে আলাদা কীভাবে ব্যাখ্যা করুন। ধন্যবাদ
নিক

1

জন্য যদি ইমেজ খুবই বড় প্রয়োগ করা হয় না, হার্ডওয়্যার উপর নির্ভর করে।imageView.contentMode = .scaleAspectFillcornerRadius

পুনরায় আকারিত প্যানোরামা চিত্রগুলি সহ কয়েকটি পরীক্ষা:

  • আইফোন এক্স, চিত্রের আকার 5000x1107: 000 4000x886: ✅ ✅
  • আইফোন 6 এস প্লাস, চিত্রের আকার 10000x2215: 🚫 5000x1107: ✅ ✅
  • আইফোন 6 এস, চিত্রের আকার 10000x2215: 🚫 5000x1107: ✅ ✅

চিত্র দেখার মাত্রা যেখানে 160x100। মজার বিষয় হল, নতুন হার্ডওয়্যার অগত্যা আরও সক্ষম নয়।

আরও পরীক্ষার ফলাফলের সাথে নিখরচায় এই পোস্টে সম্পাদনা করুন!


0
-(void) viewDidAppear:(BOOL)animated{
       [super viewDidAppear:animated];
       [self setMaskTo:viewDistance 
             byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight];
           }

- (void)setMaskTo:(UIView*)view byRoundingCorners:(UIRectCorner)corners
     {
      UIBezierPath *rounded = [UIBezierPath 
                bezierPathWithRoundedRect:view.bounds
                                              byRoundingCorners:corners

                     cornerRadii:CGSizeMake(20.0, 20.0)];

          CAShapeLayer *shape = [[CAShapeLayer alloc] init];
          shape.frame = self.view.bounds;
         [shape setPath:rounded.CGPath];
          view.layer.mask = shape;
       }

0

সুইফট ৪.২ উত্তর:

কোণার ব্যাসার্ধটি কাজ করার জন্য, চিত্রকে একটিতে যুক্ত করুন UIViewএবং তারপরে আপনাকে চিত্রটির masksToBoundsসম্পত্তি সেট করতে হবে true:

planeImage.layer.masksToBounds = true
planeImage.layer.cornerRadius = 20

দ্রষ্টব্য: 20 টি পছন্দসই দ্বারা প্রতিস্থাপন করুন cornerRadius


0

পূর্ববর্তী উত্তরগুলি থেকে কিছুই কাজ করছে না?

এটি ঘটতে পারে যে ইউআইআইমেজভিউর আকারটি আকারের চেয়ে বড় bigger কোণার ব্যাসার্ধটি ভাল সেট করা যেতে পারে তবে সে ক্ষেত্রে দৃশ্যমান নয়।

কোড দ্বারা ইউআইআইমেজভিউ আকারের দ্রুত চেক করুন: (বা এক্সকোডে "দেখুন ইউআই হায়ারার্কি" সরঞ্জামটি ব্যবহার করতে পারেন)

self.imageView.backgroundColor = [UIColor greenColor]; 

এই দৃশ্যে আপনার নিশ্চয়তা দেওয়া উচিত যে ইউআইআইমেজভিউতে চিত্রটির মতো একই অনুপাত রয়েছে।

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