使用CALayer制作按钮轮

时间:2016-09-20 19:19:27

标签: ios objective-c calayer

我一直在使用按钮的CALayer为个人资料图片创建一个圆形按钮。

我删除了一个背景图片,而是直接将渐变应用到此配置文件图片所在的ViewController视图的背景中,由于某种原因,我的个人资料图片消失了!这是我用来制作按钮的代码:

//NSLog(@"Building round layer. proflieImageButton width is: %f", _profileImageButton.imageView.frame.size.width);
CALayer *imageLayer = _profileImageButton.layer;
[imageLayer setCornerRadius:_profileImageButton.frame.size.width/2];
[imageLayer setBorderWidth:1];
[imageLayer setBorderColor:[[UIColor colorWithRed:195.0 green:195.0 blue:195.0 alpha:1.0] CGColor]];
[imageLayer setMasksToBounds:YES];

我没有碰这个代码,但是当我运行它时,我的VC背景设置正确但我的按钮消失了。我仍然可以点击它应该进入配置文件屏幕的空间,并且通过从屏幕边缘进行录制以找到命中框的位置来判断它的大小。

我也尝试使用[_profileImageButton setClipsToBounds:YES],但这导致了相同的结果。我评论了setMasksToBounds调用,图像在那里,正确定位和调整大小,但当然不是四舍五入。

所以,我补充说明了NSLog。但是,首先我打印_profileImageButton.frame.size.width。当我这样做时,我得到了1000.0,虽然个人资料图像仍然消失了。

然后,我决定看看按钮上的框架大小和按钮上的imageView是否相同,所以我把它设置为你上面看到的,虽然没有注释掉...大小为0, ,配置文件按钮按预期显示,圆形且尺寸合适!

评论说NSLog逆转了这一点。我不知道是什么导致它,或者它为什么一开始就停止工作,但是有人可以解释可能发生的事情,所以我可以确保它不会在我的代码中破坏吗?

现在,这不是事情的结束。

按下按钮后,您将转到Profile View Controller。在这个VC上,我也以类似的方式显示配置文件Image,除了它只是一个UIImageView而不是包装成一个按钮。当菜单中的配置文件按钮中断时,它还会破坏配置文件中的配置文件图像。这个,因为它没有单独的imageView,不会以同样的方式工作。我无法让它出现。

以下是我在View Controller上使用的非常相似的代码片段,当我删除菜单的背景图片时,它常常工作,但不再适用。

    NSLog(@"Building round layer. profileImageView width is: %f", _profileImageView.frame.size.width);
//Make the Profile Image round
CALayer *imageLayer = _profileImageView.layer;
[imageLayer setCornerRadius:_profileImageView.frame.size.width/2];
[imageLayer setBorderWidth:1];
[imageLayer setBorderColor:[[UIColor colorWithRed:195.0 green:195.0 blue:195.0 alpha:1.0] CGColor]];
[imageLayer setMasksToBounds:YES];

知道发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

viewDidLoad方法中,您的观看次数不正确。将代码移至viewDidLayoutSubviews。它应该有所帮助。