ios - সুইফটে একটি ইউআইবাটন এর রাউন্ড শীর্ষ কর্নার




swift uibutton (6)

আইওএস 11 এটিকে সত্যই সহজ করে তুলেছে কোণগুলি। নীচের কোডটি উপরের বাম এবং নীচের ডান কোণে বৃত্তাকার করে।

myView.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMaxYCorner]

আমি জানি যে আমি চারটি কোণ ব্যবহার করে এটি ব্যবহার করতে পারি:

 myBtn.layer.cornerRadius = 8
 myBtn.layer.masksToBounds = true

যেহেতু আমি কেবল দুটি গোল করতে চাই, তাই আমি কিছু গবেষণা করেছি এবং এটি পেয়েছি:

extension UIView {
    func roundCorners(corners:UIRectCorner, radius: CGFloat) {
        let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
        let mask = CAShapeLayer()
        mask.path = path.CGPath
        self.layer.mask = mask
    }
}

যাকে এভাবে বলা হয়:

view.roundCorners([.TopLeft , .TopRight], radius: 10)

তবুও এটি কোনও ইউআইবাটনটির পক্ষে কাজ করে না। আমি যখন UIButton টাইপ করার জন্য এক্সটেনশানটি স্যুইচ করি এবং এটি একটি বোতামটি পাস করি, আউটপুটটি দেখতে এই রকম হয়:

প্রশ্নটি হল, আমি কীভাবে এটি একটি ইউআইবাটনতে কাজ করতে পারি?


আপনার এক্সটেনশনটি এর মতো হতে আপডেট করুন:

extension UIView {
func roundCorners(corners:UIRectCorner, radius: CGFloat) {
    let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
    let mask = CAShapeLayer()
    let rect = self.bounds
    mask.frame = rect
    mask.path = path.cgPath
    self.layer.mask = mask
}
}

আকৃতির স্তর (মুখোশ) ফ্রেমটি জানতে হবে


এই কোডটি ব্যবহার করুন,

let path = UIBezierPath(roundedRect:viewTo.bounds, byRoundingCorners:[.TopRight, .TopLeft], cornerRadii: CGSizeMake(20, 20))
let maskLayer = CAShapeLayer()
maskLayer.path = path.CGPath
viewTo.layer.mask = maskLayer

আশা করি এর সহায়ক


রাউন্ডিংটি কোণার দর্শন / বোতামে প্রয়োগ করা হয় .. তবে বোতামের সীমানায় এসে এটি সঠিকভাবে প্রয়োগ হচ্ছে না। আমি কি এর কোন সমাধান পেতে পারি? @

আমি যে কোডটি ব্যবহার করেছি তা এখানে রয়েছে, যা iOS11.0 এবং উপরের (সীমান্ত) কাজ করছে এবং নীচের সংস্করণগুলিতে নয় (<11.0)

if #available(iOS 11.0, *) {
        self.layer.cornerRadius = radius
        self.layer.maskedCorners = maskedCorners
    } else {
        let shapeLayer = CAShapeLayer()
        shapeLayer.position = self.center
        self.layer.masksToBounds = true
        self.clipsToBounds = true
        let bezirePath = UIBezierPath(roundedRect: self.bounds,
                                      byRoundingCorners: corners,
                                      cornerRadii: CGSize(width: radius, height: radius))
        shapeLayer.bounds = frame
        shapeLayer.path = bezirePath.cgPath

        self.layer.mask = shapeLayer

দ্রুত 5 এবং সর্বাধিক নমনীয়তার জন্য

একটি রাউন্ডকর্নার্স ফাংশন সহ একটি এক্সটেনশান সংজ্ঞা দিন

extension UIButton {
    func roundCorners(corners: UIRectCorner, radius: Int = 8) {
        let maskPath1 = UIBezierPath(roundedRect: bounds,
                                     byRoundingCorners: corners,
                                     cornerRadii: CGSize(width: radius, height: radius))
        let maskLayer1 = CAShapeLayer()
        maskLayer1.frame = bounds
        maskLayer1.path = maskPath1.cgPath
        layer.mask = maskLayer1
    }
}

রাউন্ডকর্নার্স ফাংশনটি কল করুন

myButton.roundCorners(corners: [.topLeft, .topRight])

বা একটি নির্দিষ্ট ব্যাসার্ধ সঙ্গে

myButton.roundCorners(corners: [.topLeft, .topRight], radius: 20)


দ্রুতগতির 3 জন্য কিরীট মোদীর উত্তর পরিবর্তন করা হয়েছে:

extension UIButton {
   func roundedButton(){
       let maskPAth1 = UIBezierPath(roundedRect: self.bounds,
                                    byRoundingCorners: [.topLeft , .topRight],
                                    cornerRadii:CGSize(width:8.0, height:8.0))
       let maskLayer1 = CAShapeLayer()
       maskLayer1.frame = self.bounds
       maskLayer1.path = maskPAth1.cgPath
       self.layer.mask = maskLayer1
   }
}

এক্সটেনশনের ফাইলটির শুরুতে যুক্ত করতে ভুলবেন না:

import UIKit

শীর্ষস্থানীয় বা নীচের কোণগুলি রাউন্ডিংয়ের বিকল্প সহ আপনি যদি কোনও ইউআইভিউয়ের জন্য একটি এক্সটেনশন চান তবে আপনি ব্যবহার করতে পারেন:

extension UIView {
   func roundedCorners(top: Bool){
       let corners:UIRectCorner = (top ? [.topLeft , .topRight] : [.bottomRight , .bottomLeft])        
       let maskPAth1 = UIBezierPath(roundedRect: self.bounds,
                                    byRoundingCorners: corners,
                                    cornerRadii:CGSize(width:8.0, height:8.0))
       let maskLayer1 = CAShapeLayer()
       maskLayer1.frame = self.bounds
       maskLayer1.path = maskPAth1.cgPath
       self.layer.mask = maskLayer1
   }
}

যা একটি বোতাম হিসাবে বলা হয়:

myButton.roundedCorners(top: true)




rounded-corners