2016-04-06 8 views
1

Я пытаюсь сохранить границу для UIButton. Если я использую следующий код, он работает.Установить границу для UIButton

Корпус: 1

[[_myButton layer] setBorderWidth:1.0f]; 
[[_myButton layer] setBorderColor:[UIColor lightGrayColor].CGColor]; 

Но раньше, когда я писал:

self.baseTypeButton.layer.borderWidth=2.0f; 
self.myButton.layer.borderColor=[UIColor lightGrayColor]; 

XCode предложил мне сделать

enter image description here

Теперь мой код изменился, но я не удалось установить границу в этом случае:

Корпус: 2

_myButton.layer.borderWidth=2.0f; 
_myButton.layer.borderColor=(__bridge CGColorRef _Nullable)([UIColor lightGrayColor]); 

Я не использую Auto-макет. Может ли кто-нибудь объяснить, в чем разница между case-1 и case-2. Почему случай-2 не работает.

+0

вы добавили '#import ' рамки? – ivarun

+0

@ivarun: рамки QuartzCore уже добавлены в моем проекте –

+1

UIColor не является CGColor. Вы не можете это преодолеть. Вы можете использовать это, чтобы сохранить время yor https://github.com/AlexHsieh/ButtonAppearance – AlexHsieh

ответ

4

layer.borderColor должен быть CGColor, поэтому код ниже будет работать.

_myButton.layer.borderWidth=2.0f; 
_myButton.layer.borderColor=[ UIColor lightGrayColor ].CGColor; 

Ваш код

[UIColor lightGrayColor] 

возвращает экземпляр UIColor, а не экземпляр CGColor. И UIColor не может подключиться к CGColor, поэтому ваш литой

(__bridge CGColorRef _Nullable) 

возвращает неожиданный результат.

Вы можете увидеть странный результат, используя этот код

NSLog(@"%@", (__bridge CGColorRef _Nullable)([UIColor lightGrayColor])); 

возвращающегося ниже. (Xcode 7,3)

2016-04-06 15:30:51.415 36442877[8570:2643221] UIDeviceWhiteColorSpace 0.666667 1 

Если вы даете каталог экземпляра BorderColor CGColor, вам не нужна отливка.

1

Если вы используете ARC в своем проекте, чем,

_myButton.layer.borderWidth=2.0f; 
_myButton.layer.borderColor=(__bridge CGColorRef _Nullable)([UIColor lightGrayColor]); 

не будет работать, потому что __bridge CGColorRef _Nullable будет autorelease reference.the момент CFRelease() называется объект исчезает и указывает на нет.

И

[[_myButton layer] setBorderWidth:1.0f]; 
[[_myButton layer] setBorderColor:[UIColor lightGrayColor].CGColor]; 

будет работать, как ожидалось.

Для дополнительной проверки информации:

ARC and bridged cast

+0

Поиск ARC в Интернете, я не говорю о Xib или авто-автозапуске @ uday.m –

+0

ok .i получил Вашу точку. Спасибо –

+0

Отлично! вы [email protected] –

0

Используйте этот код

_myButton.layer.borderWidth=2.0f; 
_myButton.layer.borderColor=[UIColor lightGrayColor].CGColor; 
+0

Итак, я использую вышеуказанный код в розетке? – Shyam

 Смежные вопросы

  • Нет связанных вопросов^_^