我想制作一个圆形的UIView或UIImageView。或者我可以改变使用滑块大小的圆圈,以及带有选择器视图的颜色。
答案 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
}
}
答案 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:
将Clip to Bounds
设置为true(或图片将延伸到圆圈之外):
它现在应该在InterfaceBuilder中自行解决,这非常漂亮。一定要将宽度和高度设置为相同的值,否则它的形状就像一个齐柏林飞艇!
答案 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
}
}
由于该应用程序本身具有绿色主题,因此我需要在白色背景的各个屏幕上显示多个彩色图标。因此,我将UIImgeView
放在了RoundedUIView
的上方,使它们看起来像这样: