首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

制作一个类似苹果VFL(Visual Format Language)的格式化语言来描述类似UIStackView那种布局思路,并解析生成页面

既然UIStackView已经提供了一种既先进又简洁的布局思路,为何不通过制作一个类似VFL这样的DSL语言来处理布局。...AssembleView(组装视图)和PartView(零件视图) 在设计格式化语言之前需要对布局做个统一思想进行管理,在看了WWDC里关于UIStackView的介绍后感觉任何复杂的布局都能够通过这样一种组合排布再组合排布的思路特别适合用格式化语言来描述...PartView布局相关属性 width:UILabel和UIImage这样有固定大小的可以不用设置,会按照固定大小的来。 height:有固定大小的可以不用设置。...PartView视图控件相关设置 通过以下属性即可生成对应的UILabel,UIImageView或者UIButton等控件视图,而不用特别指出需要生成哪种控件视图 text:设置文字内容 font:...也可以添加一个UIButton设置UIControlStateHighlighted时的样式。

95020

Swift:静态工厂方法

尽管子类化是一项重要的语言功能,即使在面向协议的编程时代,也很容易将自定义设置与自定义行为混淆。我们并没有在上面的UILabel中真正添加任何新行为,我们只是在设置一个实例。...(暂时), //以免将此功能添加到我们的应用程序全局使用UIButton中。...在这种情况下,“自动版式”的声明性确实很方便——我们可以预先指定所有约束,而不必重写任何方法或响应任何调用。 就像用于视图一样,工厂方法为我们提供了非常干净的调用方式。...尤其是在测试依赖于特定模型配置的代码时,很容易以充满样板的测试结束,这使它们更难以阅读和调试。...-使用静态工厂方法和属性的替代方法是使用实​​际工厂对象。

2.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    设计模式之创建型模式

    模式是一项管理复杂度的技术,几乎所有模式都遵循两个原则: 针对接口编程,而不是实现。 多用组合,少用继承。 很多模式看上去很类似,这是因为实现各种模式的方式一般就是继承和组合。...模式依据其设计目的可以分为三大类——创建型(Creational)、结构型(Structural)和行为型(Behavioral)。本文主要论述几个创建型模式之间的区别与联系。...{ return UILabel() } func createButton() -> UIButton { return UIButton(...class GenericUIFactoryUILabel, B: UIButton>: UIFactory { func createLabel() -> UILabel {...后记 创建型模式就介绍到这里,接下来会再写一篇结构型模式介绍和一篇行为型模式介绍。可能你觉得很多模式平常根本用不到,没关系,理解并就行了。等哪天你看别人的源码的时候看着看着福至心灵:“耶?

    66540

    1.注册或登录页面设计:UILabel,UIButton,UITextField

    作为iOS开发的入门总结的第一篇,这里以最常见的注册或登陆页面设计作为开篇,这里主要会用到UILabel,UIButton,UITextField这三个控件。...说明: 这里为了展现UITextField的文本框关联键盘的设置,这里把“密码”和“确定密码”的关联键盘都设置为数字键盘,实际应用中密码一般都允许为数字或字母。 实现了键盘收回操作。...UILabel *label1 = [[UILabel alloc]initWithFrame:CGRectMake(50.0, 20.0, 200.0, 50.0)]; //设置Label的位置和大小...UILineBreakModeMiddleTruncation,//截去中间 // } UILineBreakMode; //如果adjustsFontSizeToFitWidth属性设置为YES,这个属性就来控制文本基线的行为...,这类操作也非常普遍和重要。

    2.4K50

    iOS_自定义UITabBarController标签视图控制器

    (这是用来改变颜色,即点击状态的): @interface MyTabBarController () //之前选中的按钮 @property(nonatomic, retain) UIButton...*selectedBtn; @end 然后开始写自己想要的东西了,在viewDidLoad中: (1)删除继承父类而来的tabBar,自定义自己想要的视图,其frame为原来tabBar的frame...(2)然后定义了4个按钮和4个label,即标签和标签下的标题 (3)然后循环给4个按钮添加点击事件,触发事件是同一个clickBtn - (void)viewDidLoad { [super...:) forControlEvents:UIControlEventTouchUpInside]; } } (4)然后实现按钮的点击事件clickBtn:实现按钮和其下面标题 选择和未选择状态的切换...;也需要实现视图的跳转: #pragma mark -- 自定义tabBar按钮的点击事件 -(void)clickBtn:(UIButton *)sender { //设置上一个按钮

    55830

    Runtime再理解

    1,关于编译时和运行时 编译时: Objective-C、Java、Swift等高级语言,其可读性很强,但是并不能直接被机器识别,所以就需要将这些源代码编译成相对应的机器语言(比如汇编语言),最终会生成二进制代码...也就是说,有很多的类和成员变量以及方法实现等,在编译的时候是不知道的,而在运行的时候,我们所编写的代码才会转换成完整的、确定的代码。...*), log2(sizeof(UILabel *)), @encode(UILabel *));//增加成员变量 objc_registerClassPair(cls);//注册该类...UIColor.redColor; label.text = self.name; [self.view addSubview:label]; } @end 而NormanGreenVC和NormanOrangeVC...*), log2(sizeof(UILabel *)), @encode(UILabel *));//增加成员变量 objc_registerClassPair(cls);//注册该类

    65120

    MNKit - 业务开发中简化属性设置的工具类

    接下来,简单介绍一个我在实际开发中抽取出来的工具类 - MNKit MNButton 业务开发中,UIButton控件应该算最常用的控件之一了,而且它的属性设置还贼麻烦,很多个都是要用 [ set...这一行代码即可创建拥有上面代码所需要的按钮的基本属性 UIButton 除了有文字标题展示的样式之外,也有用image 或者 backgroundImage展示的情况 //一句代码设置 - 按钮背景图片...设置图片是设置BackgroundImage让他铺满整个button,所以这里的方法传入的属性是BackgroundImage ---- MNLabel 业务开发中,UIButton控件如果登场率如果不能排在第一...,那么比它更常见的非UILabel莫属了,和UIButton一样,UILabel很常见,又经常有许多属性需要设置 - 字体大小、颜色、内容等等 //快速设置内容,文字颜色,字体大小,父控件 [MNLabel...lineSpacing:4 parentView:self.view]; 类似于MNButton,MNLabel也是封装了UILabel

    1.6K80

    【 iOS 应用开发 】 UIKit 控件 ( 代码生成控件 | UIView 属性方法 | Storyboard | Bundle | Property List | 动画 | 图片内存优化 )

    组件 , 用于区分 UILabel 和 UIButton , 这里只删除 UILabel 控件 ; 4.判定组件类型 : 使用 isKindOfClass 判断 对象 类型 ; [view isKindOfClass...:[UIButton class]] 5.删除所有 UILabel 控件 : 使用 for in 循环 删除所有的 UILabel 控件 ; //1....几行 文字 , Lines 属性 设置 0 就会自动进行换行 ; 2.UILabel 行高设置 : 自动换行的前提是 , UILabel 有对应的多行的行高 , 如果 UILabel 高度很小只能显示...1 行 , 那么 UILabel 自动换行 也只是显示 1 行 , 因此 如果需要自动换行的话 , 需要给 UILabel 设置足够的行高 ; 3.宽高控制 : UILabel 的 宽度 和 高度...设置 UIImageView 和 UILabel 切换 // ① 获取对应的数据 字典 NSMutableDictionary * d = self.pics[self.index

    4K40

    实践-小效果 III

    饼状图.gif 大家都知道这是通过 CAShapeLayer 和 CABasicAnimation 结合起来实现的,可是其中还是有需要注意的地方,实现的步骤大致如下: 绘制一个 CAShapeLayer...新闻.gif 数据model内的数据解析,这一步很关键。...如果在一个 UIButton 中你设置 setImage并且 setTitle 。你会发现,默认的是 图片在左边,文字在右边。并且这跟 UIButton 的Frame无关。...可以说是专门为 UILabel和UIImameView添加点击效果的控件,认清楚这个事实,我们运用UIButton的时候就更准确了,我们在实际的开发中这样的会遇到这样的情况,有一个小图标,但是这个图标又能点击...Paste_Image.png 不过这里是另一种实现思路,也挺不错的:iOS在cell中使用倒计时的处理方法 6.列表和网格视图的相互切换 ?

    1.1K20

    UILabel、UIImageView和UIButton

    UILabel 说两个UILabel的小众属性和方法。...该属性是一个UIImage的数组,可以实现一个简单的动画,但是只有在做非常规动画的时候才会有优势。但是不要存放大量的UIImage实例,这样会容易引起内存问题,进而会导致程序崩溃。...设置无限次循环 [animationImageView startAnimating];//开始播放 //[animationImageView stopAnimating];//停止播放 UIButton...但需要实现一个有点击事件的视图的时候,而这个视图内部的布局有需要自定义,这个时候就可以自定义一个UIButton,然后通过addSubview的方式给自定义的Button添加个性化组件和布局。...之前的时候,遇到上面的需求,我都是子类化一个UIView,然后给该子类添加手势,其实只需要子类化一个UIButton即可,这样就不用自己添加手势了!

    77430

    猫学习IOS(五岁以下儿童)UI之360其他下载管理器广场UI

    kColCount 3 //九宫格中第一行距离屏幕最上边距离 #define kStartY 20 /* 思路:将三个控件放到一个view中 没有通过双层for循环换行,而是通过第几个然后推断他的行和列...[appView addSubview:icon]; //UILabel:应用程序名称 UILabel *label = [[UILabel alloc...:应用程序下载按钮 UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(label.frame...思路 思路:将三个控件放到一个view中 没有通过双层for循环换行,而是通过第几个然后推断他的行和列 来定位他的xy坐标完毕 012 在第一行:相当于i/kColCount //行 一行:...;UIButton的字体设置 //设置标题 label.text = dict[@"name"]; //设置字体大小 label.font

    20740
    领券