如何制作圆形UIView

时间:2009-12-10 04:17:06

标签: iphone uiview uiimageview geometry quartz-core

我想制作一个圆形的UIView或UIImageView。或者我可以改变使用滑块大小的圆圈,以及带有选择器视图的颜色。

7 个答案:

答案 0 :(得分:104)

我至少可以向您展示绘制任意大小圆圈的快捷方式。没有OpenGL,不需要核心图形绘制。

导入QuartzCore框架以访问UIView或UIImageView的 .cornerRadius 属性。

#import <QuartzCore/QuartzCore.h>

还可以手动将其添加到项目的Frameworks文件夹中。

将此方法添加到视图控制器或您需要的任何位置:

-(void)setRoundedView:(UIImageView *)roundedView toDiameter:(float)newSize;
{
    CGPoint saveCenter = roundedView.center;
    CGRect newFrame = CGRectMake(roundedView.frame.origin.x, roundedView.frame.origin.y, newSize, newSize);
    roundedView.frame = newFrame;
    roundedView.layer.cornerRadius = newSize / 2.0;
    roundedView.center = saveCenter;
}

要使用它,只需传递 UIImageView 和直径。此示例假定您将名为“circ”的UIImageView添加为视图的子视图。它应该设置 backgroundColor ,以便您可以看到它。

circ.clipsToBounds = YES;
[self setRoundedView:circ toDiameter:100.0];

这只是处理 UIImageViews ,但您可以将其概括为任何 UIView

注意:从iOS 7开始,clipToBounds需要为YES。

答案 1 :(得分:31)

// For those looking to round the corners of an image view
imageView.layer.cornerRadius = imageView.bounds.size.width/2;
imageView.layer.masksToBounds = YES;

答案 2 :(得分:22)

如果有人正在寻找Swift等效物而不是下面的答案(Xcode7.2):

(为此,工作高度和宽度必须相等。)

extension UIView {
    func makeCircular() {
        self.layer.cornerRadius = min(self.frame.size.height, self.frame.size.width) / 2.0
        self.clipsToBounds = true
    }
}

enter image description here

答案 3 :(得分:13)

无需图形调用。只需将角半径设置为宽度/ 2.这可以在任何可视对象上完成,即UI元素

答案 4 :(得分:4)

正如一些评论中所提到的,@ IBDesignable现在使这一过程变得更加容易,因此您可以使用Interface Builder来配置舍入的UIImageView。

首先创建一个名为RoundedImageView.swift的类并将此代码粘贴到它:

import UIKit

@IBDesignable public class RoundedImageView: UIImageView {

    override public func layoutSubviews() {
        super.layoutSubviews()

        //hard-coded this since it's always round
        layer.cornerRadius = 0.5 * bounds.size.width
    }
}

在InterfaceBuilder中选择UIImageView并将类从UIImageView更改为自定义RoundedImageView:

enter image description here

Clip to Bounds设置为true(或图片将延伸到圆圈之外):

enter image description here

它现在应该在InterfaceBuilder中自行解决,这非常漂亮。一定要将宽度和高度设置为相同的值,否则它的形状就像一个齐柏林飞艇!

enter image description here

答案 5 :(得分:3)

你需要制作透明的UIView(背景颜色alpha为0),然后在其drawRect:中使用CoreGraphics调用绘制你的圆圈。您还可以编辑视图的图层,并为其指定一个cornerRadius。

答案 6 :(得分:3)

一种简洁,简洁,优雅的解决方案是创建一个名为RoundedUIView的类,然后将其选择为Xcode的Identity Inspector中UIView元素的自定义类,如所附的屏幕快照所示。

import UIKit

@IBDesignable public class RoundedUIView: UIView {

    override public func layoutSubviews() {
        super.layoutSubviews()

        self.layer.cornerRadius = self.frame.width / 2;
        self.layer.masksToBounds = true
    }
}

enter image description here

由于该应用程序本身具有绿色主题,因此我需要在白色背景的各个屏幕上显示多个彩色图标。因此,我将UIImgeView放在了RoundedUIView的上方,使它们看起来像这样:

enter image description here