为UIButton设置边框

Uda*_*y.M 2 objective-c uibutton cgcolor ios

我正试图为UIButton保留边框.如果我使用以下代码,它正在工作.

情况1

[[_myButton layer] setBorderWidth:1.0f];
[[_myButton layer] setBorderColor:[UIColor lightGrayColor].CGColor];
Run Code Online (Sandbox Code Playgroud)

但在我写作之前:

self.baseTypeButton.layer.borderWidth=2.0f;
self.myButton.layer.borderColor=[UIColor lightGrayColor];
Run Code Online (Sandbox Code Playgroud)

XCode建议我这样做

在此输入图像描述

现在我的代码发生了变化,但在这种情况下我没能设置边框:

案例:2

_myButton.layer.borderWidth=2.0f;
_myButton.layer.borderColor=(__bridge CGColorRef _Nullable)([UIColor lightGrayColor]);
Run Code Online (Sandbox Code Playgroud)

我没有使用自动布局.任何人都可以解释case-1和case-2之间的区别.为什么案例2不会工作.

Sat*_*ito 7

layer.borderColor必须是CGColor,因此下面的代码将起作用.

_myButton.layer.borderWidth=2.0f;
_myButton.layer.borderColor=[ UIColor lightGrayColor ].CGColor;
Run Code Online (Sandbox Code Playgroud)

你的代码

   [UIColor lightGrayColor]
Run Code Online (Sandbox Code Playgroud)

返回一个UIColor实例,而不是一个CGColor实例.并且UIColor无法桥接到CGColor,所以你的演员

(__bridge CGColorRef _Nullable)
Run Code Online (Sandbox Code Playgroud)

返回意外结果.

您可以使用此代码查看奇怪的结果

NSLog( @"%@", (__bridge CGColorRef _Nullable)([UIColor lightGrayColor]) );
Run Code Online (Sandbox Code Playgroud)

回到下面.(Xcode 7.3)

2016-04-06 15:30:51.415 36442877[8570:2643221] UIDeviceWhiteColorSpace 0.666667 1
Run Code Online (Sandbox Code Playgroud)

如果你给borderColor CGColor实例目录,你不需要强制转换.