【问题标题】:Create UIImageView with circle border iOS创建带有圆形边框iOS的UIImageView
【发布时间】:2015-09-28 01:04:02
【问题描述】:

我正在尝试在我的UIIMageView 周围创建一个边框,这是一个使用cornerRadius 的完美圆。我看过的所有内容都表明我的代码是正确的,但它返回的更像是菱形。 (我已经导入了quartzCore,不确定是否需要)

image.layer.cornerRadius = (image.bounds.size.width/2);
image.layer.borderWidth = 5;
image.layer.borderColor = [UIColor whiteColor].CGColor;

有什么想法吗?

【问题讨论】:

  • 这里的高度和宽度应该相同才能使其成为圆形。
  • UIIMageView 被限制为相同的宽度和高度。

标签: ios objective-c cocoa-touch uiimageview


【解决方案1】:

您是否尝试过添加:

image.layer.masksToBounds = YES;

另一件事:图像的宽度是否等于其高度?

【讨论】:

  • UIImageView 的宽高相等,image.layer.masksToBounds = YES 对我不起作用
【解决方案2】:
image.layer.cornerRadius = image.frame.size.width /2;
image.layer.masksToBounds = YES;
image.layer.borderWidth = 5;
image.layer.borderColor = [UIColor whiteColor].CGColor;

图像视图的高度和宽度必须相等

【讨论】:

    【解决方案3】:

    更简单的 no codign 继续你的 Storyboard 选择你的 UIImageView 并在 Identity Inspector 下检查到右侧的列,然后在 User Defined Runtime Attribute 下添加一个数字和密钥路径:layer.cornerRaius Neber 150 或其他任何东西,然后使用你的代码实现,看屏幕:

    现在你的代码和:

    如果你想使用你的代码,你可以使用相同的想法:

    //your code:
    
    image.layer.cornerRadius = (image.bounds.size.width/2);
    image.layer.borderWidth = 5;
    image.layer.borderColor = [UIColor whiteColor].CGColor;
    
    //improve with:
    
        CGFloat radius = 150.0f;
        self.image.layer.cornerRadius = radius;
    

    你可以像这个例子一样为通用应用添加一个函数:

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        self.image.layer.masksToBounds = YES;
        self.image.layer.borderWidth = 5;
        self.image.layer.borderColor = [UIColor whiteColor].CGColor;
    
        if (isIpnoe4 || isIphone5) {
    
        CGFloat radius = 150.0f;
    
        } else if (isIphone6) {
    
            CGFloat radius = 200.0f;
    
        } else if (isIphone6Plus) {
    
            CGFloat radius = 250.0f;
    
        } else {
    
            //here is ipad/ipadmini
    
            CGFloat radius = 250.0f;
        }
        self.image.layer.cornerRadius = radius;
    }
    

    您可以使用此方法在Prefix.pch 或标题中定义不同的显示:

    #define   IsIphone6Plus     ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )1104 ) < DBL_EPSILON )
    #define   IsIphone6     ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )667 ) < DBL_EPSILON )
    #define   IsIphone5     ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
    #define   IsIphone4     ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )480 ) < DBL_EPSILON )
    

    希望对你有所帮助

    【讨论】:

    • 这看起来不错,但是 UIIMageView 是用于通用应用程序的,并且被限制在 UIViewController 的顶部、左侧和右侧,因此它总是不同的大小
    • 谢谢,我改进了我的答案,以便在通用模式下提供其​​他方法
    【解决方案4】:

    步骤 (1) 正如其他人所说,您需要确保您的宽度和高度是完全相同的值。如果您完全确定是这种情况,请转到第 2 步。

    步骤 (2) 即使您认为您完全确定了第 1 步,但通常情况并非如此。我是根据我自己以前尝试做同样事情的个人经验这么说的。您会惊讶于 AutoLayout 在运行时对您的尺寸所做的一些疯狂的事情。即使你认为你的价值观是正确的,它们也会发生细微的变化。让我猜猜,你是在使用 Storyboard 来创建你的 ImageView 吗?如果您的回答是肯定的,请转到第 3 步。

    步骤 (3) 为了验证这个问题是由 AutoLayout 做一些有趣的事情引起的,在代码中创建一个测试 UIImageView 而不使用任何 Stroyboards,这样做(我现在不在我的 Mac 上,所以语法可能有点偏离) :

    var imageView: UIImageView = UIImageView(frame: CGRect(x: 0.0, y: 0.0, width: 100.0 height: 100.0))
    imageView.layer.cornerRadius = (imageView.bounds.size.width/2)
    imageView.layer.borderWidth = 5.0
    imageView.layer.borderColor = UIColor.redColor()
    imageView.backgroundColor = UIColor.yellowColor()
    self.view.addSubview(imageView)
    

    如果你运行它,它会显示为一个正确的圆圈。那么这就是你的问题的原因。我现在学会了用严格的代码创建我的所有对象,由于过去遇到的所有问题,我什至不再使用 Storyboard。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      相关资源
      最近更新 更多