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

Objective-C实现链式编程语法(DSL)

比如[self.view addSubview:xxxView];如果想要在一个对象连续调用多个方法,就要使用多组中括号嵌套(当然要保证每个方法都能把该对象作为返回值return)。...报错 DSL_image这个东西UIView中找不到,为什么是UIView呢?明明我们创建的是一个UIImageView。...原因很简单,因为我们的DSL_frame是UIView的category中声明并实现的,更要命的是,UIView(DSL)中声明的DSL_frame这个方法返回的block的返回值是一个UIView对象...为什么最后要使用一个.view来返回我们创建的view?...针对于第一个问题,我们是以一个中间类DSLViewMaker来创建一个view,然后链式调用DSLViewMaker的对象方法对这个view进行配置。

8K20
您找到你想要的搜索结果了吗?
是的
没有找到

iOS内存优化

如果要在UIImageView中显示一个来自bundle的图片,你应保证图片的大小和UIImageView的大小相同。...在运行中缩放图片是很耗费资源的,特别是UIImageView嵌套在UIScrollView中的情况下。...减小文档的一个方式就是服务端和你的app中打开gzip。这对于文字这种能有更高压缩率的数据来说会有更显著的效用。...View释放后,1中的color不会跟着释放,而是一直存在内存中;2中的color会跟着释放掉,当然再次生成color时就会再次申请内存.UIView再添加一个UIImageView显示图片作为UIView...undefined iOS视图都是一个图层,最先放置的图层就会在最底层,如此最先给UIView添加一个UIImageView就可以作UIView的背景图片使用啦 。

91664

iOS-自定义View的封装

开发过程中,自定义控件使用的频率非常高,接下来简单对自定义控件做个小结 View的封装 如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部的子控件创建封装起来,不让外界看见 外界可以传入对应的数据模型给...view,view拿到模型数据后给内部子控件设置对应的数据 代码封装 新建一个继承UIView的类 initWithFrame:方法中添加子控件(也可以使用懒加载) 重写模型属性set方法,set方法中设置模型属性到子控件...UIScrollView会触发layoutSubviews - 旋转Screen会触发父UIView的layoutSubviews事件 - 改变一个UIView大小的时候也会触发父UIView的layoutSubviews...UIView的类 新建一个xib文件(xib的文件名最好和控件名一样,修改最外面那个控件的class为控件类名 ) 创建xib 添加子控件、设置子控件属性...而用xib相对于比较死板,但是更简单,更方便 自定义UIView时,如果该View一直一个样式,推荐使用xib,简单方便 而子控件经常随着父控件变化而变化,推荐使用纯代码,灵活多变

21610

图层树和寄宿图 -- iOS Core Animation 系列一

视图层级关系中可以互相嵌套一个视图可以管理它的所有子视图的位置。 iOS中,所有的视图都是从UIView这个基类派生出来的。...1.3 平行的层级关系 每个UIView都对应着一个CALayer,视图的职责是创建并管理这个图层,以确保党子视图层级关系中添加或者被移除的时候,他们对应的图层也同样的在对应的层级关系树中有相同的操作...真正用来屏幕显示的是图层(CALayer),UIView是对它的一个封装,提供一些交互触摸功能,和一些Core Animation底层的接口。...但是 iOS,如果将 UIImage 的值赋给它,只能得到一个空白的图层。 事实,真正赋值的类型应该是CGImageRef,这是一个指向CGImage结构的指针。...因为UIView创建时,会自动的吧图层的代理设置为自己,然后提供了一个-displayLayer:方法实现。 ---- - 系列一完 -

1.2K20

iOS面试题-UI篇

UIView显示屏幕归功于CALayer,通过调用drawRect方法来渲染自身的内容,调节CALayer属性可以调整UIView的外观, UIView继承自UIResponder,比起CALayer...UIView本身,更像是一个CALayer的管理器,访问它的跟绘图和坐标有关的属性,如frame,bounds等,实际内部都是访问它所在CALayer的相关属性 UIView有个layer属性,可以返回它的主...补充部分,这部分有深度了,大致了解一下吧,UIView的layer树形系统内部被系统维护着三份copy 逻辑树,就是代码里可以操纵的,例如更改layer的属性等等就在这一份 动画树,这是一个中间层,系统正是在这一层更改属性...,那么会通过initWithStyle:reuseIdentifier:创建一个cell 当cell离开界面就会被放到缓存池中,以供下次复用 如何高性能的给 UIImageView 加个圆角?...加载图片的逻辑 SDWebImage 中为 UIImageView 提供了一个分类UIImageView+WebCache.h, 这个分类中有一个最常用的接口sd_setImageWithURL:placeholderImage

1.9K21

UIImageView圆角,教你远离cornerRadius

),这会给我们带来额外的性能损耗,如果这样的圆角操作达到一定数量,会触发缓冲区的频繁合并和上下文的的频繁切换,性能的代价会宏观地表现在用户体验----掉帧。...当然这些效果不会直接显示屏幕,可以使用Instruments的CoreAnimation检测,当然你也可以自己写一个检测帧频的方法。 那如何高效的为UIImageView创建圆角?...修改image为圆角图片 图片进行了切角处理后,将得到的含圆角UIImage通过setImage传给了UIImageView。操作没有触发GPU离屏渲染,过程CPU内完成。...延伸:如何高效的为UIView创建圆角? 做法的原理是手动画出圆角的image,UIView增加一层UIImageView,将image赋值给UIImageView。...这样的一个好处是以防美工随意更改圆角的角度?

2.1K40

Quartz2D复习(四) --- 图层CALayer和动画CAAnimation

1、CALayer 1)、ios中,能看得见摸得着的东西基本都是UIView, 比如按钮、文本标签、文本输入框、图标等,这些都是UIView 2)、UIView之所以能显示屏幕,完全是因为它内部的一个图层...3)、创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层:@property (nonatomic,readonly,...retain) CALayer *layer; 4)、当UIView需要显示到屏幕时,会调用drawRect:方法进行绘图,并且会将所有内容绘制自己的图层,绘图完毕后,系统会将图层拷贝到屏幕,于是就完成了...多了一个事件处理的功能,CALayer不能处理用户的触摸事件;   不过CALayer的性能会高一些,因为它少了事件处理的功能,更加轻量级 9)、每个UIView内部都默认关联着一个CALayer, 我们可以称这个...的,并非UIView 4)、CAAnimation继承结构,紫色虚线表示继承自某类,红色虚线表示遵守某个协议 : ?

1.4K30

【IOS 开发】基本 UI 控件详解 (UISegmentedControl | UIImageView | UIProgressView | UISlider | UIAlertView )

UISegmentedControl 控件属性 (1) Style 属性 Style 属性 :  -- Plain : 分段控件使用最普通的风格; -- Bordered : 最普通风格添加一圈边框...UIImageView 控件属性 (1) UIImageView 简介 UIImageView 简介 :  -- 继承结构 : UIImageView 继承 UIView, 该类不能响应用户操作, 是静态控件...保证图片长边完全显示出来, 完整显示图片; -- Aspect Fill : 保持纵横比缩放, 保证图片短边能显示出来, 只水平或垂直方向某一个方向是完整的, 另一个方向截取; -- Center :...UIActivityIndicatorView 代码示例 (1) 创建 IBOutletConnection 创建 IBOutletConnection :  -- 按住 Option 键 将一个元素拖动到...UIActionSheet 简介 (1) UIActionSheet 作用 UIActionSheet 作用 : 该控件是显示界面底部的按钮列表, 该控件 有 一个标题 和 多个按钮; (2) UIActionSheet

2.5K40

【iOS】教你用ZFPlayer+KTVHTTPCache搭建缓存,预加载的播放器

一、缓存+预加载功能 1、播放器mgr核心代码 mgr实现ZFPlayerMediaPlayback协议,然后初始化时,开启本地服务器 + (void)initialize { [KTVHTTPCache...[KTVHTTPCache proxyURLWithOriginalURL:assetURL]; } [self prepareToPlay]; } 2、播放器Player核心代码 创建...string 视频链接 @property (nonatomic, copy) NSString *video_url; @end 核心播放器为ZFPlayerController,为了方便管理,我们创建一个中间类包裹...ZFPlayerController,且增加可以设置的预加载属性 @interface MPPlayerController : NSObject // 预加载几条 @property (nonatomic...个,和下2个视频,逐个开启预加载,视频预加载(核心类KTVHCDataLoader)到10%就停止,然后开始下一个视频的预加载。

7.2K40

图形

该框架可以用于基于路径的绘图、变换、颜色管理、脱屏渲染,模板、渐变、遮蔽、图像数据管理、图像的创建、遮罩以及PDF文档的创建、显示和分析 Graphics Context Graphics Context...如果你持有一个context:参数,那么使用UIKit提供的方法之前,必须将该上下文参数转化为当前上下文。...使用UIGraphicsPushContext切换到一个全新的绘图context。 使用UIKit绘制图形B。...使用UIGraphicsBeginImageContext将旧的绘图context入栈,创建新的绘图context并使用。 绘制图形B。...视图即UIView,并不是直接显示屏幕,而是创建视图对象的时候视图对象会自动创建一个层,而视图对象把要显示的东西绘制,待到需要显示时硬件将所有的层拷贝,然后按Z轴的高低合成最终的显示结果

1.1K10

demo1 动态显示view或弹框 动态隐藏view或弹框

实现界面如上所示: 有一个弹框,弹框上边有一个关闭按钮,点击按钮,可以关闭弹框。点击弹框的周围区域也可以关闭按钮。 点击上边的隐藏弹框也可以关闭按钮。...实现功能的基础,以动画的形式展示跟隐藏。 思路:之前的开发中,我的思路比较局限。想着用一个view来做中间的那一块,那么问题来了,左上角的关闭按钮,就加在view的左上角。...当然这思路还是别人的指点下完成的。 思路如下: 1.首先确实需要一个弹框的view1 view1的大小是整个界面的大小。...initWithFrame:frame]) { [self createUI]; } return self; } - (void)createUI{ //1.创建一个...UIImageView *bgView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 64, SCREENW,SCREENH)]; UITapGestureRecognizer

98350

demo1 动态显示view或弹框 动态隐藏view或弹框

一个弹框,弹框上边有一个关闭按钮,点击按钮,可以关闭弹框。点击弹框的周围区域也可以关闭按钮。 点击上边的隐藏弹框也可以关闭按钮。   实现功能的基础,以动画的形式展示跟隐藏。...思路:之前的开发中,我的思路比较局限。想着用一个view来做中间的那一块,那么问题来了,左上角的关闭按钮,就加在view的左上角。...当然这思路还是别人的指点下完成的。 思路如下: 1.首先确实需要一个弹框的view1 view1的大小是整个界面的大小。...initWithFrame:frame]) { [self createUI]; } return self; } - (void)createUI{ //1.创建一个...UIImageView *bgView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 64, SCREENW,SCREENH)]; UITapGestureRecognizer

1.1K70

CALayer的寄宿图

一个视图就是屏幕显示的一个矩阵块(比如图片、文字或者视频),它能够拦截点击以及触摸手势等用户输入。视图层级关系中可以相互嵌套一个视图可以管理他的所有所有子视图的位置。...实际,CALayer才是真正用来屏幕显示和做动画的,UIView仅仅是对它的一个封装,提供了处理触摸事件的功能,以及CoreAnimation底层方法的高级接口。...通常而言,我们展示一张图片需要使用UIImageView,但是我们却可以利用CALayerUIView展示一张图片,是不是很有趣?...标准设备一个点就是一个像素;但是Retina屏幕,按照不同的屏幕尺寸,一个点可以表示一到多个像素。...创建4个UIImageView,分别设置不同的图片,然后将这四个imageView添加到一个View?这样做一来占用内存,二来耗用渲染性能,三来增加载入时间。 那么有没有一个更好的解决方案呢?

1K20

iOS事件响应控制 原

以前遇到一个项目,一个UIImageView对象上面有一个UIButton对象,然而项目的需求需要在点击 button的同时,UIImageView也接收到点击事件,不使用代理和通知方法的前提下...UIApplication会取出队列中最前面的事件,发消息给UIWindow,然后UIWindow会对其所有子视图调用hitTest:withEvent:这个方法,这个方法会返回一个UIView的对象,...例如:我们建两个文件,一个继承于UIButton,一个继承于UIImageView,我们UIImageView里的代码如下: #import "MyImageView.h" @implementation...} -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{     NSLog(@"点击了Image"); } 然后将他们创建一个...可以证明,事件视图寻找中,UIImageView我们重写hitTest:withEvent:方法后,切断了寻找链,如果我们这个做: -(UIView *)hitTest:(CGPoint)point

52340

iOS实现点击图片放大&长按保存图片

一:简介 项目中免不了会遇到,实名认证上传身份证、绑定银行卡等功能。...实际操作中呢,会涉及到上传图片,页面布局时,可能图片不是一张,考虑到布局的美观等因素,显示图片的位置变得很小,如果想查看上传的图片是否清晰,内容是否完整,可能就需要放大才能实现,下面就和大家分享一下我封装的一类...二:实现思路分析 给UIImageView添加手势 封装一个继承NSObject的FBYImageZoom类 写一个函数用来接收出入的UIImageView 根据传入的UIImageView重新绘制Window...写一个函数用来接收出入的UIImageView /** * @param contentImageview 图片所在的imageView */+(void)ImageZoomWithImageView...根据传入的UIImageView重新绘制Window中 +(void)ImageZoomWithImageView:(UIImageView *)contentImageview{ UIWindow

5.9K20
领券