Tag: ibdesignable

IBDesignable / IBInspectable –设计人员的梦想

使用IBDesignable进行实时渲染。 我知道。 我去哪儿了? IBDesignable和IBInspectable背后的核心思想是,您可以在Attribute Inspector中为自定义类创建自己的属性。 例如,在下面的图像中的“属性”检查器的顶部,您可以看到特定于我的PieView类的自定义属性,例如“环形颜色”,“背景图像”,“背景层颜色”等。 宣告👾 将类声明为an @ IBDesignable会激活实时渲染功能。 要将新属性声明为使用实时渲染功能,必须在声明之前使用@IBInspectable关键字。 定义新属性时,必须显式定义其类型。 属性检查器需要明确的类型定义,才能知道提供属性的值的类型。 并非所有类型都受支持。 支持的类型包括:Int,Double,String,Bool,CGFloat,CGPoint,CGSize,CGRect,UIColor和UIImage。 优点🎨 IBDesignable / IBInspectable使您可以灵活地直观地查看所做的更改,而不是不断运行您的应用程序。 不仅如此,而且由于您可以直接在界面生成器中进行更改,因此,如果您与具有界面生成器知识的设计人员一起工作,则无需进行开发人员就可以轻松地进行视觉更改并进行视觉更改。 每个人都赢🎉 以下是用于创建上面的饼图的PieView类的示例,请随时查看。 直到下一次#TFHout✌🏾 完整的项目可以在这里找到:https://github.com/theFlawlessHack/ibdesignable-pie-chart-ios 你走到了底部❤️

什么是IBDesignable / IBInspectable?

IBDesignable和IBInspectable是Interface Builder使用的属性,但与IBOutlet和IBAction也是属性不同, IBInspectable和IBDesignable用于直接在Interface Builder中呈现元素。 WWDC 14 [1]中显示的这些属性首先受Objective-C支持,但现在您也可以与Swift一起使用。 渲染自定义UI组件 IBDesignable属性负责标识从UIView继承的类,该UIView将在Interface Builder中呈现。 例如,我使用IBDesignable创建了一个ImageView定制: 导入UIKit @IBDesignable类CustomImageView:UIImageView { 覆盖func prepareForInterfaceBuilder(){ self.layer.cornerRadius = self.bounds.size.width / 2 self.layer.borderWidth = 6 self.layer.borderColor = UIColor.blackColor()。CGColor self.layer.masksToBounds = true } } 您可以在下面看到结果: 但是要获得此结果,我需要在Identity Inspector中将UIImageView设置为CustomImageView : 通过Interface Builder配置UI组件 IBInspectable是另一个可用于配置您的UI组件(例如)的属性,只需要您在代码中将该属性与该属性一起使用即可: @IBInspectable var borderWidth:CGFloat = 6.0 { didSet { self.layer.borderWidth = self.borderWidth } } 结果是: 不幸的是, IBInspectable不能与所有类型一起使用,请参见下面的列表,它可以支持: […]

Swift 3中的@IBDesignable和@IBInspectable。

IBDesignable 和 IBInspectable ,这是一种创建自定义元素和属性的方法。 可以直接将其添加到iOS Interface Builder。 此WWDC 2015视频演示了如何实现自定义UI元素。 在Interface Builder中实现UI设计– WWDC 2015 –视频– Apple Developer 突出的应用程序必须具有吸引力,直观且易于使用。 Interface Builder专家将为您提供技能… developer.apple.com IB可设计 IBDesignable属性将标识UIView或从UIView继承的元素-例如:UIButton,UIImageView,UILabel等。 例如,我创建了一个Custom UIButton类, @IBDesignable 打开类KGHighLightedButton:UIButton { 公共替代init(框架:CGRect){ super.init(frame:框架) setTitle(“ MyTitle”,用于:.normal) setTitleColor(UIColor.blue,for:.normal) } 公用必需的init?(编码器aDecoder:NSCoder){ super.init(编码器:aDecoder) } } 添加此类后,在ViewController中导入自定义类 #import KGHighLightedButton 在Interface Builder(`StoryBoard`)中,拖放UIButton。 转到“ 显示身份检查器 ”,并将类和模块设置为“ KGHighLightedButton”。 IB检查 让我们在按钮上添加一些自定义属性。 🙌 为此,我们必须使用IBInspectable属性。 让我们看看如何添加它们。 @IBInspectable public var cornerRadius:CGFloat […]

在Swift中使用IBInspectables

具有可自定义细分的简单进度栏 我已经看到了很多进度条小部件,所以我决定尝试通过Interface Builder进行自定义的“ SegmentedProgressBar”。 要继续或快速将此视图添加到您自己的项目中,请在GitHub上获取它。 在深入研究代码之前,我先介绍了两个主要功能: 1)自定义细分 段应该是完全可自定义的,包括宽度,高度,背景颜色,borderWidth,borderRadius,borderColor。 同样,分隔线段的线也应可自定义:线高,线宽(线段之间的距离),线色。 2)IBDesignables IBDesignables允许Interface Builder实时呈现自定义视图的UI更改。 与IBInspectables结合使用,用户可以编辑特定的运行时变量并立即查看结果,从而节省了大量的开发时间。 入门 首先,我们需要建立一个支持IBDesignables的自定义类。 @IBDesignable标记使Interface Builder知道该类应自动呈现。 如您所见,所有定义为IBInspectable变量的属性在属性检查器中都是可见的。 现在建立我们的第一部分! 我将重写视图的onDraw()函数,以实时呈现对该类所做的所有UI更改。 每个段和线的所有自定义绘制逻辑都将在此函数内发生。 在这里,我创建了一个名为’segment1’的新UIView,该视图以父级居中居中,其宽度,高度和颜色取自可检查变量。 编辑这些变量中的任何一个都应实时更改“ segment1”的形状和颜色。 注意:如果Interface Builder似乎没有呈现任何更改,则可能必须在编辑器菜单中启用“自动刷新视图”。 建立进度条 现在我们有了第一段,但是还需要两个元素:第二段以及它们之间的连接线。 此时, draw()函数变得越来越庞大。 让我们draw()重构为drawLine()和drawSegments() ,然后制作一些实例变量来跟踪我们的视图。 我们将创建两个UIView列表,一个用于段,一个用于线,以便以后可以与每个元素进行交互。 现在添加buildOddSegments()函数。 大多数逻辑已在drawLine()和drawSegment() ,因此此实现应与buildEvenSegments()相当相似。 太好了,现在我们可以为任意数量的细分提供工作进度条! 一切看起来都不错,只是许多部分都被绘制在了线后。 让我们添加一个快速功能,在构建完所有线之后更新线段的z轴。 现在我们可以从界面构建器手动更新selectedIndex ,让我们创建一些函数以使开发人员能够以编程方式执行此操作。 最终波兰语 进度栏确实开始融合在一起,但是我们需要在其完全完成之前添加一些自定义选项。 开发人员应该能够编辑线段的cornerRadius , borderWidth和borderColor 。 此外,如果开发人员希望使所有线段都为圆形而无需计算特定的拐角半径,则应添加一个circularSegment选项。 首先让我们为cornerRadius , borderWidth , borderColor和cornerRadius添加一些新的可检查变量。 为了使线段完美地呈圆形,其宽度和高度必须相等。 在这里,我使用didSet{}来确保segmentWidth […]

是否有可能与UICollectionViewCells使用IBDesignable并生活呈现在故事板?

我知道如何使用@IBDesignable自定义视图。 但有可能使用单元格的IBDesignable并在故事板中呈现它们? 例如:我有一个storyboard中的collectionViewController,并添加了一个uiCollectionCell和指定的类作为我的customCellClass。 PS:我知道在collecionViews和tableViews中使用Xibs,我们必须调用方法registerNib:forReuseIdentifer在代码(和我这样做)。 只是想知道,是否有可能看到它在故事板中呈现的视图。 p.s2:我发现这一点 ,它与UIViews完美的工作,但不知道如何使它与CollectionCells和TableCells工作。 🙁

制作一个固定大小的UIView,就像UISwitch(使用IBDesignable)

当我使用本指南创build一个在XIB中devise的视图时,可以使用我的UIView子类上的IBDesignable属性在故事板中重用,如何使其具有固定的大小,并使其大小调整行为与像UISwitch的观点? 与“调整行为”我也意味着在界面生成器devise。

从笔尖实例化视图会引发错误

我尝试在这个( 链接 )教程之后创build@IBDesignable UIView子类。 第一个自定义视图很好。 但是当我尝试做另一个,我有错误。 首先,我failed to update auto layout status: the agent crashed , Failed to render instance of … 。 不知何故,我开始能够biuld和运行这些错误的项目,但后来我得到新的错误 – EXC_BAD_ACCESS …在线let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView 。 这里是整个方法: func loadViewFromNib() -> UIView { let bundle = NSBundle(forClass: self.dynamicType) let […]

IBDesignable从不完成更新故事板中的UITableViewCell

这是一个类似的问题,但不完全相同。 我创build了UITableViewCell的一个子类,它引用了一个自定义的笔尖,并将其标记为@IBDesignable。 在代码和.xib文件中进行的更改在模拟器和设备中正确显示,而不是在故事板中显示。 import UIKit @IBDesignable class TextFieldTableViewCell: UITableViewCell { var view: UIView! required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) setup() } override init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) setup() } func setup() { view = loadViewFromNib() view.frame = bounds view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight] contentView.addSubview(view) } func loadViewFromNib() -> UIView { let […]

你可以使用类别/扩展将IBDesignable属性添加到UIView?

对于那些不知道我在说什么的人,Xcode 6.0增加了一些新function,IBDesignable和IBInspectable。 当您使用IBInspectable属性标记自定义视图时,这些属性将显示在IB的属性检查器中。 同样的,当你使用IBDesignable标记一个自定义的UIView子类时,Xcode编译你的视图并调用代码在Xcode窗口中显示你的视图对象,这样你就可以看到它们的样子。 在自定义视图中添加IBDesignable和IBInspectable属性的技术在Swift和Objective-C中非常相似。 无论您使用哪种语言来定义它们,IBInspectable属性都将显示在Interface Builder属性检查器中。 我已经在Objective-C中创build了一个UIView类,并在Swift中扩展了UIView,它将视图底层的borderWidth,cornerRadius,borderColor和layerBackgroundColor属性作为视图的属性进行提升。 如果更改属性,则扩展名/类别会根据需要进行types转换,并将更改转发给图层。 IBInspectable部分效果很好。 我看到并可以在IB属性检查器中设置新属性。 我可以发誓,上周,我的视图类别/扩展的IBDesignable属性也工作,我可以看到我的自定义UIView类别在IB中呈现与它的改变图层属性。 本周它不工作。 我是幻觉吗? 在使用IBDesignable进行设置时,现有系统类的类别/扩展可以在Interface Builder中绘制自定义UI吗?

configuration@IBInspectable属性检查器控件

是否可以configuration@IBInspectable属性如何在Attribute Inspector中显示和/或控制? 例如,我有一个CGFloat属性“Overlay Alpha”,它在检查器中显示如下: 问题是调节器上/下箭头仅在积分(+/- 1)步骤中更新。 我希望他们以小步骤更新,比如+/- 0.05增量。 有没有办法做到这一点? 如何控制其他属性? 你能显示一个CGFloat而不是一个数字字段的滑块吗? 你可以添加一个工具提示吗? 你能添加静态的描述性文字吗? 只是想知道我可以自定义显示器。 我试图看看我可以推动IBDesignablefunction,使IB成为一个真正的UIdevise工具。