বৃত্তাকার কোণে তৈরি ইউআইএলবেলগুলি তৈরি করার জন্য কি কোনও অন্তর্নির্মিত উপায় রয়েছে? উত্তরটি যদি না হয় তবে কীভাবে এইরকম একটি অবজেক্ট তৈরি করা যায়?
বৃত্তাকার কোণে তৈরি ইউআইএলবেলগুলি তৈরি করার জন্য কি কোনও অন্তর্নির্মিত উপায় রয়েছে? উত্তরটি যদি না হয় তবে কীভাবে এইরকম একটি অবজেক্ট তৈরি করা যায়?
উত্তর:
আইফোন ওএস 3.0 এবং পরে শ্রেণিতে cornerRadius
সম্পত্তি সমর্থন করে CALayer
। প্রতিটি দৃশ্যের একটি CALayer
উদাহরণ রয়েছে যা আপনি ম্যানিপুলেট করতে পারেন। এর অর্থ আপনি এক লাইনে বৃত্তাকার কোণগুলি পেতে পারেন:
view.layer.cornerRadius = 8;
আপনি করতে হবে #import <QuartzCore/QuartzCore.h>
CALayer হেডার এবং বৈশিষ্ট্য অ্যাক্সেস পেতে এবং QuartzCore ফ্রেমওয়ার্ক লিঙ্ক করুন।
এটি করার একটি উপায়, যা আমি সম্প্রতি ব্যবহার করেছি, তা হল একটি ইউআইভিউ সাবক্লাস তৈরি করা যা কেবল একটি বৃত্তাকার আয়তক্ষেত্র আঁকবে, এবং তারপরে ইউআইআইএবেল বা, আমার ক্ষেত্রে, ইউআইটিএক্সটভিউ, এর ভিতরে একটি সংক্ষিপ্তসার তৈরি করবে। বিশেষ করে:
UIView
সাবক্লাস তৈরি করুন এবং এর মতো কিছু নাম দিন RoundRectView
।RoundRectView
এর drawRect:
পদ্ধতি, বৃত্তাকার কোণ জন্য প্রান্ত এবং CGContextAddArcToPoint () জন্য () CGContextAddLineToPoint মত কোর গ্রাফিক্স কল ব্যবহার দৃশ্য সীমার কাছাকাছি একটি পাথ আঁকুন।UILabel
উদাহরণ তৈরি করুন এবং এটিকে রাউন্ডরেক্টভিউর একটি উপদর্শন করুন।label.frame = CGRectInset(roundRectView.bounds, 8, 8);
)আপনি যদি একটি জেনেরিক ইউআইভিউ তৈরি করেন এবং তারপরে পরিদর্শককে ব্যবহার করে এর শ্রেণি পরিবর্তন করেন তবে আপনি ইন্টারফেস বিল্ডার ব্যবহার করে রাউন্ডরেক্টভিউটি কোনও দৃশ্যে রাখতে পারেন। আপনি আপনার অ্যাপ্লিকেশনটি সংকলন এবং পরিচালনা না করা পর্যন্ত আপনি আয়তক্ষেত্রটি দেখতে পাবেন না, তবে কমপক্ষে আপনি সংক্ষিপ্তসার স্থাপন করতে এবং প্রয়োজনে এটি আউটলেট বা ক্রিয়াগুলির সাথে সংযোগ করতে সক্ষম হবেন।
আইওএস 7.1 বা তার পরে থাকা ডিভাইসগুলির জন্য, আপনাকে যুক্ত করতে হবে:
yourUILabel.layer.masksToBounds = YES;
yourUILabel.layer.cornerRadius = 8.0;
OSCarsWyck উত্তরের উপর ভিত্তি করে সুইফট আইওএস 8 এর জন্য:
yourUILabel.layer.masksToBounds = true
yourUILabel.layer.cornerRadius = 8.0
YES
হয় true
।
UILabel
বলা হয়: myLabel
।#import <QuartzCore/QuartzCore.h>
আপনার viewDidLoad
এই লাইন লিখুন:self.myLabel.layer.cornerRadius = 8;
শুভকামনা
আপনি যে কোনও নিয়ন্ত্রণের সীমানার প্রস্থের সাহায্যে বৃত্তাকার সীমানা তৈরি করতে পারেন: -
CALayer * l1 = [lblName layer];
[l1 setMasksToBounds:YES];
[l1 setCornerRadius:5.0];
// You can even add a border
[l1 setBorderWidth:5.0];
[l1 setBorderColor:[[UIColor darkGrayColor] CGColor]];
শুধু lblName
আপনার সাথে প্রতিস্থাপন UILabel
।
দ্রষ্টব্য: - আমদানি করতে ভুলবেন না<QuartzCore/QuartzCore.h>
আমি UILabel
এই প্রভাবটি অর্জনের জন্য একটি সুইফট সাবক্লাস তৈরি করেছি । সর্বাধিক বিপরীতে আমি স্বয়ংক্রিয়ভাবে পাঠ্যের রঙকে কালো বা সাদাতে সেট করেছি।
ব্যবহৃত এস-পোস্টস:
এটি কেবল কোনও আইওএস প্লেগ্রাউন্ডে পেস্ট করুন:
//: Playground - noun: a place where people can play
import UIKit
class PillLabel : UILabel{
@IBInspectable var color = UIColor.lightGrayColor()
@IBInspectable var cornerRadius: CGFloat = 8
@IBInspectable var labelText: String = "None"
@IBInspectable var fontSize: CGFloat = 10.5
// This has to be balanced with the number of spaces prefixed to the text
let borderWidth: CGFloat = 3
init(text: String, color: UIColor = UIColor.lightGrayColor()) {
super.init(frame: CGRectMake(0, 0, 1, 1))
labelText = text
self.color = color
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup(){
// This has to be balanced with the borderWidth property
text = " \(labelText)".uppercaseString
// Credits to https://stackoverflow.com/a/33015915/784318
layer.borderWidth = borderWidth
layer.cornerRadius = cornerRadius
backgroundColor = color
layer.borderColor = color.CGColor
layer.masksToBounds = true
font = UIFont.boldSystemFontOfSize(fontSize)
textColor = color.contrastColor
sizeToFit()
// Credits to https://stackoverflow.com/a/15184257/784318
frame = CGRectInset(self.frame, -borderWidth, -borderWidth)
}
}
extension UIColor {
// Credits to https://stackoverflow.com/a/29044899/784318
func isLight() -> Bool{
var green: CGFloat = 0.0, red: CGFloat = 0.0, blue: CGFloat = 0.0, alpha: CGFloat = 0.0
self.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
let brightness = ((red * 299) + (green * 587) + (blue * 114) ) / 1000
return brightness < 0.5 ? false : true
}
var contrastColor: UIColor{
return self.isLight() ? UIColor.blackColor() : UIColor.whiteColor()
}
}
var label = PillLabel(text: "yellow", color: .yellowColor())
label = PillLabel(text: "green", color: .greenColor())
label = PillLabel(text: "white", color: .whiteColor())
label = PillLabel(text: "black", color: .blackColor())
xCode 7.3.1 আইওএস 9.3.2
_siteLabel.layer.masksToBounds = true;
_siteLabel.layer.cornerRadius = 8;
আপনি যদি চান UI এর বৃত্তাকার কোণ মত বস্তু ( UILabel
, UIView
, UIButton
, UIImageView
) স্টোরিবোর্ড দ্বারা তারপর সেট clip to bounds
সত্য এবং সেট User Defined Runtime Attributes
হিসাবে কী পাথ
layer.cornerRadius
টাইপ = নম্বর এবং মান = 9 (আপনার প্রয়োজন হিসাবে)
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
label.text = @"Your String.";
label.layer.cornerRadius = 8.0;
[self.view addSubview:label];
আপনি যদি অন্যান্য উত্তরগুলির পাশাপাশি পটভূমির রঙের সাথে গোলাকার লেবেল চান তবে আপনার layer
পাশাপাশি পটভূমির রঙও সেট করতে হবে । view
পটভূমির রঙ সেট করার সময় এটি কাজ করে না ।
label.layer.cornerRadius = 8
label.layer.masksToBounds = true
label.layer.backgroundColor = UIColor.lightGray.cgColor
আপনি যদি অটো লেআউট ব্যবহার করছেন, লেবেলের চারপাশে কিছু প্যাডিং চান এবং লেবেলের আকারটি ম্যানুয়ালি সেট করতে চান না, আপনি ইউআইএলবেল সাবক্লাস তৈরি করতে এবং intrinsincContentSize
সম্পত্তি ওভাররাইড করতে পারেন :
class LabelWithPadding: UILabel {
override var intrinsicContentSize: CGSize {
let defaultSize = super.intrinsicContentSize
return CGSize(width: defaultSize.width + 12, height: defaultSize.height + 8)
}
}
দুটি একত্রিত করার জন্য আপনাকে সেটও করতে হবে label.textAlignment = center
, অন্যথায় পাঠ্যটি প্রান্তিককরণে রেখে দেওয়া হবে।
মনোোটুচ / জ্যামারিন.আইওএস এ আমি একই সমস্যাটি সমাধান করেছি:
UILabel exampleLabel = new UILabel(new CGRect(0, 0, 100, 50))
{
Text = "Hello Monotouch red label"
};
exampleLabel.Layer.MasksToBounds = true;
exampleLabel.Layer.CornerRadius = 8;
exampleLabel.Layer.BorderColor = UIColor.Red.CGColor;
exampleLabel.Layer.BorderWidth = 2;
সুইফট ২.০ এ নিখুঁতভাবে কাজ করে
@IBOutlet var theImage: UIImageView! //you can replace this with any UIObject eg: label etc
override func viewDidLoad() {
super.viewDidLoad()
//Make sure the width and height are same
self.theImage.layer.cornerRadius = self.theImage.frame.size.width / 2
self.theImage.layer.borderWidth = 2.0
self.theImage.layer.borderColor = UIColor.whiteColor().CGColor
self.theImage.clipsToBounds = true
}
এক্সকোড 8.1.2 এ স্যুইফট 3 এর সাথে সূক্ষ্মভাবে কাজ করে, আগস্ট 2017 এর সময় পরীক্ষিত
বৃত্তাকার প্রান্তগুলি সেট করার মূল বৈশিষ্ট্য "কর্নাররিডিয়াস", যেখানে আপনি যদি আপনার অ্যাপ্লিকেশনের সমস্ত লেবেলের জন্য একই স্টাইল ব্যবহার করেন তবে আমি একটি এক্সটেনশন পদ্ধতির জন্য সুপারিশ করব।
কোড:
// extension Class
extension UILabel {
// extension user defined Method
func setRoundEdge() {
let myGreenColor = (UIColor(red: -0.108958, green: 0.714926, blue: 0.758113, alpha: 1.0))
//Width of border
self.layer.borderWidth = 1.0
//How much the edge to be rounded
self.layer.cornerRadius = 5.0
// following properties are optional
//color for border
self.layer.borderColor = myGreenColor.cgColor
//color for text
self.textColor = UIColor.red
// Mask the bound
self.layer.masksToBounds = true
//clip the pixel contents
self.clipsToBounds = true
}
}
আউটপুট:
কেন এক্সটেনশন পদ্ধতি?
একটি সুইফ্ট ফাইল তৈরি করুন এবং নিম্নলিখিত কোডটি যুক্ত করুন, এতে "ইউআইএলবেল" শ্রেণিতে এক্সটেনশন পদ্ধতি রয়েছে, যেখানে এই পদ্ধতিটি ব্যবহারকারী সংজ্ঞায়িত তবে আপনার অ্যাপ্লিকেশনটিতে সমস্ত লেবেলের জন্য কাজ করবে এবং ধারাবাহিকতা এবং পরিষ্কার কোড বজায় রাখতে সহায়তা করবে, যদি আপনি ভবিষ্যতে যে কোনও স্টাইল পরিবর্তন করতে কেবল এক্সটেনশন পদ্ধতিতে প্রয়োজন।
আপনি ঠিক কী করছেন তার উপর নির্ভর করে আপনি একটি চিত্র তৈরি করতে পারেন এবং এটিকে ব্যাকগ্রাউন্ড হিসাবে অগ্রগতি হিসাবে সেট করতে পারেন।