ইউআইভিউ কনটেন্টমোডস্কেলএস্পেক্টফিল ক্লিপিং নয়


144

আমি নির্দিষ্ট আকারে (100x100) ব্যবহার করে কিছু থাম্বনেইল চিত্র আঁকার চেষ্টা করছি UIImageView। আমি আমার ইমেজ ভিউ ফ্রেমের আকার সেট 100x100 হবে, এবং সেট করেছি contentModeকরতে UIViewContentModeScaleAspectFill

আমার বোধগম্যতা হ'ল এটির ফলে আমার যে আকারটি সেট করা হয়েছে তাতে চিত্রটি আঁকতে হবে এবং চিত্রটি চিত্রের ক্ষেত্রটি পূরণ করবে এবং চিত্রের দৃশ্যের জন্য আমি যে আকারের সেট করেছি তার বাইরে অংশটি ক্লিপ করবে। যাইহোক, চিত্রটি এখনও আমি এটির জন্য নির্ধারিত 100x100 আকারের চেয়ে বড় বা ছোট আঁকা।

যদি আমি সেট করে contentModeরাখি UIviewContentModeScaleToFill, তবে চিত্রটি ঠিক 100x100 এ আঁকা, তবে এই মাত্রাগুলিতে ফিট করার জন্য এটি বিকৃত orted আশেপাশের দিকটি পূরণ না করে কেন কোনও ধারণা?

আমার কোডটি এখানে:

_photoView = [[UIImageView alloc] initWithImage:photoImage];
_photoView.contentMode = UIViewContentModeScaleAspectFill;
[self addSubview:_photoView];

CGRect photoFrame = _photoView.frame;
photoFrame.size = CGSizeMake(100, 100);
_photoView.frame = photoFrame;

আরও ভালভাবে চিত্রিত করার জন্য, আমি যা দেখছি তার একটি স্ক্রিনশট এখানে। সবুজ স্কোয়ার হয় UIViewধারণকারী UIImageViewআমি সঙ্গে কাজ করছি। আমি তাদের পটভূমির রঙ সবুজতে এবং ভিউটির ফ্রেমটি 100x100 এ সেট করেছি। পরীক্ষা হিসাবে, UIImageViewsএর আকার 50x50 হয়। আপনি দেখতে পাচ্ছেন যে, ব্যবহার করার সময় ...AspectFill, চিত্রগুলি 50x50 আকারের হয় না এবং কিছু ক্ষেত্রে আমি সেগুলি যেখানে চাই সেখান থেকে অফসেট হয়। ব্যবহার করার সময় ...ScaleToFillসেগুলি সঠিকভাবে মাপ দেওয়া হয় তবে চিত্রটি বিকৃত হয়।

স্ক্রিনশট চিত্রিত সমস্যা

উত্তর:


352

আপনি কি ক্লিপ সীমানায় সেট করার চেষ্টা করতে পারেন?

[_photoview setClipsToBounds:YES];

বা সরাসরি যদি আপনার স্টোরিবোর্ড / এক্সিবায় থাকে তবে:

এখানে চিত্র বর্ণনা লিখুন


10
এটি ছিল - ধন্যবাদ। (আমি যা দেখছিলাম তা আরও ভালভাবে দেখানোর জন্য আমি উপরের স্ক্রিনশটটি যুক্ত করেছি, উদাহরণস্বরূপ অন্য কেউ যদি এই সমস্যা জুড়ে আসে।)
জোশ বুহলার

3
ইন্টারফেসবিল্ডারে, "ক্লিপস সাবভিউ" (এনবি: এই ক্ষেত্রে, এটি "সাবভিউগুলি" আঁকড়ে না, নামটি ভুল: এটি নিজের এবং সাবভিউগুলি ক্লিপ করে) এর নাম পরিবর্তন করে
অ্যাডাম

3
এনআইবি ফাইলে 'ক্লিপ সাবভিউ' বিকল্পটি টিকিট করা একই কাজ করে। চিয়ার্স।
কোডবার্ন

তবে আপনি যদি ক্যালিয়ার সম্পত্তিটি ব্যবহার করে কোনও ছায়া যুক্ত করতে চান তবে কী হবে :( এর পিছনে অন্য দৃষ্টিভঙ্গি যুক্ত করা আমার পক্ষে আদর্শ নয়
রামবাতিনো

আপনি যদি আমার মতো অটো লেআউট ব্যবহার করছেন তবে আর একটি সম্ভাব্য কারণ রয়েছে যা ইউএসআইভিউভিউ আকারের সীমাবদ্ধতাগুলি ভেঙে এনএসলয়েটকন্ট্রেন্ট "ইউআইভিউ-এনক্যাপসুলেটেড-লেআউট-উচ্চতা"।
ewiinnnnn

8

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

সংক্ষেপে:

  1. Rasterisation - সমস্ত দৃশ্য বিষয়বস্তু rasterised হয় (টানা বা offscreen পিক্সেল বাফার) দেখুন এর সীমার স্থান তুল্য হবে। এটি চিত্রের ডেটা বা কাস্টম অঙ্কন (যেমন drawRect:) হতে পারে তবে সাবউভিউ সামগ্রী। এই জালিয়াতি contentModeসম্পত্তি বিবেচনা করে।

    দেখার সীমানার বাইরের যে কোনও কিছুই বাতিল করা হয়েছে।

  2. রচনা - ফলাফল superviews করতে কম্পোজিট করা হয় (একে অপরের উপরে টানা) subview থেকে। এটি সাবউউয়ের ফ্রেম সম্পত্তি ব্যবহার করে।

    যদি clipsToBoundsসম্পত্তি YESsuperview উপর তারপর এটি বাতিল করবে subview তার সীমা বিষয়বস্তুর বাইরে।


2

একই সমস্যা ছিল এবং এটি "ক্লিপ সাবভিউ" টিক দিয়ে সমাধান করা হয়েছিল।

চিত্রটি স্টোরিবোর্ডের পূর্বরূপে সিমুলেটরটিতে নয় তবে সমস্ত দর্শন (3.5,4,4.7,5.5, আইপ্যাড) জন্য সঠিকভাবে প্রদর্শিত হচ্ছে।

আমি "ক্লিপ সাবভিউ" টিক দেওয়ার পরে সমস্যাটি সমাধান হয়ে গেছে। :)



0

আমার সাবভিউগুলি আকার পরিবর্তন করছিল এবং আমি বুঝতে পেরেছিলাম যে এটি xib এর স্বয়ংক্রিয় বিন্যাস সেট করেছে: এখানে চিত্র বর্ণনা লিখুন


0

যদি সবকিছু ব্যর্থ হয়,

ক্লিপগুলি ViewDidLayoutSubviews পদ্ধতিতে সীমাবদ্ধ করুন।

উদাহরণ:

  override func viewDidLayoutSubviews() {

    imageProfile.layer.cornerRadius = imageProfile.bounds.size.width/2
    imageProfile.clipsToBounds = true
    imageProfile.layer.masksToBounds = true
 }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.