স্টোরিবোর্ডে কীভাবে একটি সাধারণ বৃত্তাকার বোতাম তৈরি করবেন?


104

আমি সবেমাত্র আইওএস বিকাশ শিখতে শুরু করেছি, কীভাবে সহজ বৃত্তাকার বোতামটি তৈরি করতে পারি তা খুঁজে পাচ্ছি না। আমি পুরানো সংস্করণগুলির জন্য সংস্থানগুলি পাই। আমার কি একটি বোতামের জন্য একটি কাস্টম ব্যাকগ্রাউন্ড সেট করতে হবে? অ্যান্ড্রয়েডে, আমি কেবল একটি 9 প্যাচ ব্যবহার করব, তবে আমি জানি আইওএসের এই ক্ষমতা নেই।

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

উত্তর:


82

স্টোরিবোর্ডে এটি করতে, আপনাকে বোতামটির জন্য একটি চিত্র ব্যবহার করতে হবে।

বিকল্পভাবে আপনি কোড এ এটি করতে পারেন:

 btn.layer.cornerRadius = 10
 btn.clipsToBounds = true

2
ক্লিপটোবাউন্ডসের প্রয়োজন কেন? দেখে মনে হচ্ছে, আমি এটি অপসারণ না করা পর্যন্ত সেই ছায়া কাজ করে না।
জিন্টাস_

1
ভাল উত্তর, তবে আপনি এটি আইবিতে করতে পারেন, ছবি ছাড়াই। নিচে দেখ.
zontar

223

সংক্ষিপ্ত উত্তর: হ্যাঁ

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

এটি এতে প্রদর্শিত হবে না Storyboardতবে আপনি প্রকল্পটি চালানোর সময় এটি কার্যকর হবে।

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

নোট: 'কী পাথ' এবং মান মান উচ্চতা এবং বাটন প্রস্থ অনুযায়ী পরিবর্তন করা প্রয়োজন 5. হয়। এর সূত্রটি বোতামের উচ্চতা * 0.50। সুতরাং সিমুলেটারে বা শারীরিক ডিভাইসে প্রত্যাশিত বৃত্তাকার বোতামটি দেখতে মানটির আশেপাশে খেলুন। স্টোরিবোর্ডে গোল করার জন্য যখন আপনার একাধিক বোতাম রয়েছে তখন এই পদ্ধতিটি ক্লান্তিকর দেখাবে।
layer.cornerRadius


9
নেতিবাচক ভোট দেওয়ার সময় একটি মন্তব্য যোগ করুন।
নিশান্ত

7
এটি হতাশার বিষয় যে মিল ড্রইং অ্যাপের রান হিসাবে আইবি এটি প্রদর্শন করতে পারে না।
উইলিয়াম কর্নিয়ুক

2
@ উইলিয়াম কর্নিউক: আসলে এটি পারে। পরীক্ষা করে দেখুন nshipster.com/ibinspectable-ibdesignable
নিশান্ত

ব্যবহারকারীর সংজ্ঞায়িত রানটাইম বৈশিষ্ট্যগুলি নির্ধারণ করা প্রকৃতপক্ষে কার্যকর হয়, বিল্ডিংয়ের পরে সিমুলেটারে দেখা যায়।
কনস বালাকেনা

গৃহীত উত্তর যেমন বলেছে, clipsToBoundsএটি কাজ করার জন্য আপনার বুলিয়ান কী পথও যুক্ত করতে হতে পারে ।
সর্বাধিক

86

আপনি এর মতো কিছু করতে পারেন:

@IBDesignable class MyButton: UIButton
{
    override func layoutSubviews() {
        super.layoutSubviews()

        updateCornerRadius()
    }

    @IBInspectable var rounded: Bool = false {
        didSet {
            updateCornerRadius()
        }
    }

    func updateCornerRadius() {
        layer.cornerRadius = rounded ? frame.size.height / 2 : 0
    }
}

সেট বর্গ MyButtonমধ্যে Identity Inspectorএবং আইবি আপনি আছেন হবে roundedসম্পত্তি:

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


4
এখন পর্যন্ত সেরা উত্তর। আজ দুর্দান্ত কিছু শিখলেন!
চিহ্নিত করুন

2
এই উত্তরটি সম্পূর্ণ নয়। আপনি যখন আপনার অ্যাপ্লিকেশনটি চালু করবেন, এক্সকোড ইন্টারফেস বিল্ডারে ভিউটির ফ্রেম আকার ব্যবহার করবে, অ্যাপটি চলাকালীন প্রকৃত ফ্রেমের আকার নয়।
সাইমন ব্যাকেক্স

2
আপনি "উইলসেট" এর পরিবর্তে "ডিডসেট" ব্যবহার করতে পারেন এবং আর্গুমেন্টটি রাউন্ড করে ফেলতে পারেন।
সাইমন ব্যাকেক্স

1
আপনি যদি একটি ব্যাকগ্রাউন্ড ইমেজ ব্যবহার করেন, তাহলে সেট layer.masksToBounds = trueএছাড়াও
zontar

34
  1. কোকো টাচ ক্লাস তৈরি করুন।

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

  1. রাউন্ডবটন ক্লাসে কোডটি .োকান।

    import UIKit
    
    @IBDesignable
    class RoundButton: UIButton {
    
        @IBInspectable var cornerRadius: CGFloat = 0{
            didSet{
            self.layer.cornerRadius = cornerRadius
            }
        }
    
        @IBInspectable var borderWidth: CGFloat = 0{
            didSet{
                self.layer.borderWidth = borderWidth
            }
        }
    
        @IBInspectable var borderColor: UIColor = UIColor.clear{
            didSet{
                self.layer.borderColor = borderColor.cgColor
            }
        }
    }
  2. চিত্রটি দেখুন।

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


একই উত্তর বারবার পোস্ট করা বন্ধ করুন। এটি গোলমাল হিসাবে বিবেচিত হয়। হয় আলাদা আলাদা প্রশ্নের আপনার উত্তরগুলি শিখুন বা, যদি সেগুলি সত্যই একই প্রশ্ন হয় তবে আপনি সেগুলি সদৃশ হিসাবে পতাকাঙ্কিত করতে পারেন (এবং আপনার যথেষ্ট খ্যাতি থাকলে বন্ধ করতে ভোট দিন)।
এলেক্সেনাইড

অন্যরাও এটির মধ্যে প্রবেশ করেছে কিনা তা জানেন না, তবে আমি ক্লাসটি একটি বোতামে সেট করে এবং এটির একটি ব্যাসার্ধ দেওয়ার সাথে সাথে সীমানার প্রস্থ এবং সীমানার রঙের এক্সকোড (9.2) একটি ত্রুটি ছুঁড়ে ফেলেছে যে একটি রেন্ডারিংয়ের ত্রুটি ছিল। অ্যাপ্লিকেশন বিল্ডিং সফল তবে লাল "!" প্রদর্শিত হচ্ছে। শুধু বলছি ... আমি কোডটি কেবলমাত্র সমাধানটিতে ফিরে এসেছি (যদিও এটি সত্যিই একটি মার্জিত উপায় ছিল)।
এজেগার

10

আমি এটি করার সবচেয়ে সহজ উপায়টি খুঁজে পেয়েছি, এটি হল কোণার রেডিওটিকে দর্শনের উচ্চতার অর্ধেকের মধ্যে সেট করে setting

button.layer.cornerRadius = button.bounds.size.height/2

নাহ, আমি করিনি. যদি আপনার উচ্চতা এবং প্রস্থ একই হয় (সুতরাং এটি বর্গক্ষেত্র হত) তবে আপনি একটি বৃত্ত পাবেন। তবে প্রস্থটি যদি উচ্চতার চেয়ে বেশি হয় তবে বোতামটি সঠিক হবে।
ফ্র্যাঙ্ককিএনএল

2
আপনি ঠিক বলেছেন, আমি সেই প্রশ্নের মধ্যে অন্তর্ভুক্ত থাকা চিত্রটি মিস করেছি যা দেখায় পোস্টারটি আসলে উত্তরগুলির সাথে মিলিত হওয়ার পরে গ্রহণযোগ্য উত্তরের চেয়ে বেশি ছিল - আপভোট
মাইকেল হাডসন

4

আপনি সংযোগ করতে পারেন IBOutlet স্টোরবোর্ড থেকে আপনার বোতামের ।

তাহলে আপনি সেট করতে পারেন corner radius কোণার বৃত্তাকার করতে আপনার বোতামটি ।

উদাহরণস্বরূপ, আপনার outletহয় myButtonতাহলে,

ওবজ - সি

 self.myButton.layer.cornerRadius = 5.0 ;

দ্রুতগতি

  myButton.layer.cornerRadius = 5.0

তারপর আপনি সঠিক বৃত্তাকার বাটন চান আপনার বাটন এর widthএবং heightহতে হবে equalএবং cornerRadiusউচ্চতা বা (প্রস্থ বা উচ্চতার অর্ধেক) প্রস্থ / 2 সমান হতে হবে।


4

অন্যান্য উত্তর হিসাবে কোডটিতে এই কাজটি বেশিরভাগ সম্পাদন করার পরামর্শ দিয়েছে কেবলমাত্র একটি উত্তর আসলে স্টোরিবোর্ড আইবি ইন্টারফেসে আপনার পরিবর্তনগুলি দেখার একটি উপায় সরবরাহ করে। আমার উত্তর আপনাকে ভিউ, বোতাম, চিত্র ইত্যাদির কোণার রেডিয়াস পরিবর্তন করার অনুমতি দিয়ে সেই উত্তরটির বাইরে চলে গেছে

দয়া করে নীচের কোডটি একবার দেখুন। এই কোডটি ব্যবহার করতে রাউন্ডেড ভিউ নামে একটি নতুন সুইফট ফাইল তৈরি করুন বা আপনি যেটিকে কল করতে চান তারপরে আপনার স্টোরিবোর্ডে যান এবং ক্লাসটি "রাউন্ডডভিউ", "রাউন্ডেডআইমেজভিউ" বা "রাউন্ডডবটন" তে পরিবর্তন করুন।

import UIKit

@IBDesignable class RoundedImage: UIImageView
{
    override func layoutSubviews() {
        super.layoutSubviews()

        updateCornerRadius()
    }

    @IBInspectable var rounded: Bool = false {
        didSet {
            updateCornerRadius()
        }
    }

    @IBInspectable var cornerRadius: CGFloat = 0.1 {
        didSet {
            updateCornerRadius()
        }
    }

    func updateCornerRadius() {
        layer.cornerRadius = rounded ? cornerRadius : 0
        layer.masksToBounds = rounded ? true : false
    }
}

@IBDesignable class RoundedView: UIView
{
    override func layoutSubviews() {
        super.layoutSubviews()

        updateCornerRadius()
    }

    @IBInspectable var rounded: Bool = false {
        didSet {
            updateCornerRadius()
        }
    }

    @IBInspectable var cornerRadius: CGFloat = 0.1 {
        didSet {
            updateCornerRadius()
        }
    }

    func updateCornerRadius() {
        layer.cornerRadius = rounded ? cornerRadius : 0
        layer.masksToBounds = rounded ? true : false
    }
}

@IBDesignable class RoundedButton: UIButton
{
    override func layoutSubviews() {
        super.layoutSubviews()

        updateCornerRadius()
    }

    @IBInspectable var rounded: Bool = false {
        didSet {
            updateCornerRadius()
        }
    }

    @IBInspectable var cornerRadius: CGFloat = 0.1 {
        didSet {
            updateCornerRadius()
        }
    }

    func updateCornerRadius() {
        layer.cornerRadius = rounded ? cornerRadius : 0
        layer.masksToBounds = rounded ? true : false
    }
}

1

যোগ করার সময় layer.cornerRadiusস্টোরিবোর্ড মধ্যে নিশ্চিত করুন যে আপনি বিশিষ্ট বা লম্বা স্পেস না থাকে না। আপনি যদি অনুলিপি পেস্ট করেন তবে স্থানগুলি sertedোকানো হতে পারে। এক্সকোড কোনও ধরণের সতর্কতা বা ত্রুটি বললে ভাল হবে।


0

এটা চেষ্টা কর!!

 override func viewDidLoad() {
   super.viewDidLoad()

   var button = UIButton.buttonWithType(.Custom) as UIButton
   button.frame = CGRectMake(160, 100, 200,40)

   button.layer.cornerRadius =5.0
   button.layer.borderColor = UIColor.redColor().CGColor
   button.layer.borderWidth = 2.0

   button.setImage(UIImage(named:"Placeholder.png"), forState: .Normal)
   button.addTarget(self, action: "OnClickroundButton", forControlEvents: .TouchUpInside)
   button.clipsToBounds = true

   view.addSubview(button)
}
    func OnClickroundButton() {
   NSLog(@"roundButton Method Called");
}

0

এই সমস্যাটির জন্য এক্সটেনশনটি সেরা বিকল্প। ভিউ বা বোতামের একটি এক্সটেনশন তৈরি করুন

public extension UIView {
  //Round the corners
  func roundCorners(){
    let radius = bounds.maxX / 16
    layer.cornerRadius = radius
  }
}

কোড থেকে কল করুন

button.roundCorners()

0

আমি এক্সকোড সংস্করণ 11.4 ব্যবহার করছি

বৈশিষ্ট্য পরিদর্শকটিতে, আপনি কোণার ব্যাসার্ধ নির্ধারণ করতে পারেন।

এটি স্টোরিবোর্ডে প্রদর্শিত হবে না তবে আপনি প্রকল্পটি চালানোর সময় এটি কার্যকর হবে।

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


-1
import UIKit

@IBDesignable class MyButton: UIButton
{
    override func layoutSubviews() {
        super.layoutSubviews()


    }

    func updateCornerRadius(radius:CGFloat) {
        layer.cornerRadius = radius
    }
    @IBInspectable var cornerRadius:CGFloat = 0{
        didSet{
            updateCornerRadius(radius: cornerRadius)
        }
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.