Как скруглить углы кнопки

182

У меня есть изображение прямоугольника (jpg) и я хочу использовать его, чтобы залить фон кнопки закругленным углом в xcode.

Я написал следующее:

UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
CGRect frame = CGRectMake(x, y, cardWidth, cardHeight);
button.frame = frame;
[button setBackgroundImage:backImage forState:UIControlStateNormal];

Тем не менее, кнопка, которую я получаю при таком подходе, не имеет закругленных углов: вместо этого это простой прямоугольник, который выглядит точно так же, как мое исходное изображение. Как я могу получить вместо этого изображение с закругленным углом для представления моей кнопки?

Спасибо!

double07
источник

Ответы:

436

Я думаю, что у вас есть проблема, я попробовал следующее решение с UITextArea, и я полагаю, что это будет работать и с UIButton.

прежде всего импортируйте это в ваш файл .m -

#import <QuartzCore/QuartzCore.h>

а затем в вашем loadViewметоде добавить следующие строки

    yourButton.layer.cornerRadius = 10; // this value vary as per your desire
    yourButton.clipsToBounds = YES;

Надеюсь, что это работает для вас, и если да, общайтесь.

devsri
источник
6
Также работает с инспектором «Определенные пользователем атрибуты времени выполнения»
Ави Черри
Работает и для Swift! Просто измените ДА на истинное.
Эндрю Томас
119

Вы можете достичь с помощью этих атрибутов RunTime

введите описание изображения здесь

Мы можем сделать пользовательскую кнопку. Просто смотрите прикрепленный скриншот.

пожалуйста, обратите внимание:

в атрибутах времени выполнения для изменения цвета рамки следуйте этой инструкции

  1. создать категорию класса CALayer

  2. в файле h

    @property(nonatomic, assign) UIColor* borderIBColor;
  3. в м файле:

    -(void)setBorderIBColor:(UIColor*)color {
        self.borderColor = color.CGColor;
    }
    
    -(UIColor*)borderIBColor {
        return [UIColor colorWithCGColor:self.borderColor];
    }

теперь можно установить скриншот проверки цвета рамки

обновленный ответ

Спасибо

Крутарт Патель
источник
4
Только я или информация в ответе неполная? Это на самом деле не работает. Обновление: работает, пока я не уточняю borderColor. Но тогда он всегда использует черный для borderColor.
Джонни
3
Расширенный ответ: Цвет, установленный в IB, вероятно, имеет тип UIColor, который не работает с borderColor, который имеет CGColorRef. Или что-то вроде того. Таким образом, решение состоит в том, чтобы создать категорию на CALayer, с чем-то вроде @property(nonatomic, assign) UIColor* borderIBColor;(который не конфликтует с каким-либо другим именем) в заголовочном файле, и реализация:-(void)setBorderIBColor:(UIColor*)color{self.borderColor = color.CGColor;} -(UIColor*)borderIBColor{return [UIColorcolorWithCGColor:self.borderColor];}
Джонни
1
Если вам не нужен цвет границы, установите для borderRadius значение 0, и у вас его не будет!
jungledev
Как насчет Свифта?
Джайпракаш Дубей
1
@JayprakashDubey я создаю расширение CALayer.
Крутарт Патель
14

Вы можете проверить мою библиотеку под названием DCKit . Это написано на последней версии Swift .

Вы сможете создать кнопку / текстовое поле с закругленными углами непосредственно из Интерфейсного конструктора:

DCKit: закругленная кнопка

Он также имеет много других интересных функций, таких как текстовые поля с проверкой, элементы управления с границами, пунктирные границы, круговые и линии роста волос и т. Д.

Андрей Гордеев
источник
11

Нажимаем на предел радиуса угла вверх, чтобы получить круг:

    self.btnFoldButton.layer.cornerRadius = self.btnFoldButton.frame.height/2.0;

введите описание изображения здесь

Если рамка кнопки имеет квадратную форму, это не имеет значения frame.height или frame.width. В противном случае используйте самый большой из обоих.

Хавьер Калатрава Ллаверия
источник
7

Импортируйте каркас QuartCore, если его нет в существующем проекте, а затем импортируйте #import <QuartzCore/QuartzCore.h>в viewcontroller.m

UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect]];
CGRect frame = CGRectMake(x, y, width, height); // set values as per your requirement
button.layer.cornerRadius = 10;
button.clipsToBounds = YES;
iAnkit
источник
6
UIButton* closeBtn = [[UIButton alloc] initWithFrame:CGRectMake(10, 50, 90, 35)];
//Customise this button as you wish then
closeBtn.layer.cornerRadius = 10;
closeBtn.layer.masksToBounds = YES;//Important
Vinay Mahipal
источник
4

Первый набор ширины = 100 и высоты = 100 кнопки

Цель C Решение

YourBtn1.layer.cornerRadius=YourBtn1.Frame.size.width/2;
YourBtn1.layer.borderColor=[uicolor blackColor].CGColor;
YourBtn1.layer.borderWidth=1.0f;

Swift 4 Solution

YourBtn1.layer.cornerRadius = YourBtn1.Frame.size.width/2
YourBtn1.layer.borderColor = UIColor.black.cgColor
YourBtn1.layer.borderWidth = 1.0
iOS Lifee
источник
2

Если вы хотите закругленный угол только до одного угла или двух углов и т. Д., Прочитайте этот пост:

[ObjC] - Кнопка UIB с закругленным углом - http://goo.gl/kfzvKP

Это подкласс XIB / раскадровки. Импорт и установка границ без написания кода.

очь
источник
2

Для Свифта:

button.layer.cornerRadius = 10.0
pableiros
источник
2

обновлено для Swift 3:

Используемый ниже код, чтобы сделать угол UIButton круглым:

 yourButtonOutletName.layer.cornerRadius = 0.3 *
        yourButtonOutletName.frame.size.height
Киран Джадхав
источник
2

Попробуйте мой код. Здесь вы можете установить все свойства UIButton, такие как цвет текста, цвет фона, радиус угла и т. Д.

extension UIButton {
    func btnCorner() {
        layer.cornerRadius = 10
        clipsToBounds = true
        backgroundColor = .blue
    }
}

Теперь звоните вот так

yourBtnName.btnCorner()
IOS
источник
0

Для iOS SWift 4

button.layer.cornerRadius = 25;
button.layer.masksToBounds = true;
Джайеш Най
источник
0

введите описание изображения здесь

Для цели C :

submitButton.layer.cornerRadius = 5;
submitButton.clipsToBounds = YES;

Для Свифта :

submitButton.layer.cornerRadius = 5
submitButton.clipsToBounds = true
Мистер Джавед Мултани
источник
0

Swift 4 Обновление

Я также перепробовал много вариантов, но не смог получить угол UIButton. Я добавил код радиуса угла в viewDidLayoutSubviews()решенную проблему.

func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        anyButton.layer.cornerRadius = anyButton.frame.height / 2
    }

Также мы можем настроить cornerRadius следующим образом

func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        anyButton.layer.cornerRadius = 10 //Any suitable number as you prefer can be applied 
    }
Adwait Gaikwad
источник