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

Swift-MVVM 简单演练(三)

,有没有影响到其它地方 时刻提醒自己,当我们兴高采烈的为完成了某一处的改动而沾沾自喜的时候。...下面我们想办法测试一下 将存储用户账户相关的文件删除 然后运行程序,就直接到登录界面,然后点击登录按钮发现总是需要等待2秒钟,我们找到之前延迟两秒钟的地方处理一下。...使用layoutIfNeeded 函数让自动布局系统,提前更新当前收集到的约束变化 但是我们这里不是控制器,只是一个View,里面并没有viewDidAppear方法。我们就要找到一个类似的办法。...上面说自动布局工作原理的时候提到过 如果希望某些约束提前更新!...使用layoutIfNeeded 函数让自动布局系统,提前更新当前收集到的约束变化 因此,我们手动调用一下layoutIfNeeded方法,将代码布局的约束都创建好,并显示出来,然后再进行更新约束的动画

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

    iOS字典转模、xib的使用、自定义视图

    用类方法进行视图的实例化 + (instancetype) appView;//使用类方法加载xib + (instancetype) appViewWithAppInfo:(KNAppInfo *)...2:修改UIButton的只读属性titleLabel指针对应的对象属性font(readonly表示titleLabel的指针指不可修改,但label的font可以修改) [[downloadButton...titleLabel] setFont: [UIFont systemFontOfSize:12]]; //设置UIButton的title的font,先获取UI Button的内部UILabel:@...属性不能使用New 开头进行命名 1.6 @synthesize的用法 ---- @synthesize 中可以定义 与变量名不相同的getter和setter的命名,籍此来保护变量不会被不恰当的访问...和setter的命名,籍此来保护变量不会被不恰当的访问 /** 懒加载模型的图片对象属性 */ - (UIImage *)image{ if (nil == _image) {//

    85810

    iOS学习——UIPickerView的实现年月选择器

    因此,为了满足项目需求,自己用UIPickerView写了一个只显示年月的选择器界面,同时还可以控制我们的显示的最小时间。当然,如果要控制其他内容也都是可以的,无非就是在数据处理上多一些处理和控制。...UIDatePickerModeCountDownTimer, // Displays hour and minute (e.g. 1 | 53) } __TVOS_PROHIBITED; 一 整体方案    在整个实现中分为两个部分,首先是用一个基类来布局我们选择器的整体布局...,包括我们的选择器的标题,取消、确定按钮,蒙层等大框架的布局,然后是子类在基类的基础上添加UIPickerView来实现选择器的基本功能以及数据加载和显示。...,行数和列数也是根据我们的需求来进行控制。...currentDate]; NSInteger lastIndex = 0; NSDate *newdate; //循环获取可选月份,从当前月份到最小月份,直接用字符串的比较来判断是否大于设定的最小日期

    4.6K130

    UIButton实现各种图文结合的效果以及原理

    iOS的UIButton是一个非常常见而且常用的控件,我们一般用他来实现某个功能的提交以及选择操作。...有时候我们希望应用的界面元素是丰富多彩的,有时候希望建立一个图文结合的控件来响应用户的手势操作,因此建立一个即有图片也有文字的按钮来实现功能,这个只需要分别调用UIButton的setTitle:forState...两个子视图;而有的人则不会用UIButton来实现图文结合的功能。...在调整之前我们先定义几个特定的变量值: : CGRect titleRect = titleLabel.frame; //文本控件在按钮中的frame值。...,或者水平居右,或者垂直居上或者垂直居下则可以用UIButton的原生(UIControl)属性: @property(nonatomic) UIControlContentVerticalAlignment

    3K10

    Objective-C AVPlayer播放视频的使用与封装大致效果界面搭建Demo地址

    AVPlayer封装.gif 界面搭建 看下成员变量就知道我怎么搭建的了,这里我将video播放层的size作为参照量,对所有控件的size按照其video的size宽高进行比例缩放 @interface...- (UIButton *)playBtn { if (!...UIColor greenColor]; _playBtn.selected = NO; _playBtn.enabled = NO; _playBtn.titleLabel.adjustsFontSizeToFitWidth...我这里没有使用第三方框架来做约束,而是使用最基本的按百分比设置frame。旋转屏幕时通过调用本类- (void)resetFrame:(CGSize)size;方法来重设frame。...先看下初始化 对video的size设置是时始终用最小的边来确定高度,宽度与屏幕当前宽度相当 //初始化 - (instancetype)initWithFrame:(CGRect)frame andPath

    1.5K40

    Combine之Backpressure

    我们在使用订阅者的时候,都是用Sink或者Assign,但是大家有没有想过一个问题,这两种订阅者在第一次连接到发布者的时候,会发送一个无限大(unlimited)的需求(Demand)。...,以此来定义 Backpressure 的响应行为。...如果你对响应式编程有了一定的认识的话,把你的项目从 RxSwift 迁移到 Combine 应该是非常容易的,不得不说Combine“抄袭”的非常成功。...如果非要说 RxSwift 和 Combine 的最大的不同之处,那就是 RxSwift 到现在为止都没有支持 backpressure,只有RxJava才有这个机制;但是 Combine 中原生对这个特性进行了支持...这些操作符都可以控制订阅者接收的元素数量,所以可以放心地连接无限需求的订阅者,比如:sink(receiveValue:) 和 assign(to:on:)。

    60920

    分分钟解决iOS开发中App启动广告的功能

    想让我写一个,于是乎,抽空写了一个,代码通俗易懂,简单的封装了一下,各种事件用block回调的,有俩种样式的广告,一种是全屏广告,另一种是下面露logo的,类似网页新闻的启动广告。...1.首先建一个继承View的LBLaunchImageAdView .h文件 代码如下: // 面试题持续整理更新中,如果你想一起进阶去大厂,不妨添加一下交流群1012951431 typedef enum...,在此,我只传递了三个必要的参数,其他参数都用@property属性来调配,达到自己想要的效果,再有就是一个block的回调函数,主要处理各种事件。...下面我们看看.m文件里面实现的部分 // 面试题持续整理更新中,如果你想一起进阶去大厂,不妨添加一下交流群1012951431 #import "LBLaunchImageAdView.h" @interface...下面我们说下怎么集成我封装的这个功能吧,挺简单的,首先来看看代码: // 面试题持续整理更新中,如果你想一起进阶去大厂,不妨添加一下交流群1012951431 - (BOOL)application:

    1.3K60

    想要漂亮的蒙版指引吗?跟着我手把手的教你写出来

    比如 强制更新提示(只有 APP 无法使用 很少出现) 蒙版提示(没有弹出蒙版的才出现) 新人大礼包(三天一次) 注册通知确认框 评分弹框 。。。。。。...但是为什么偶尔会出现,可能原因是我们是内容,当请求足够快的时候,就可以正常的显示出来。 作为最后,为了这样的问题不会再出现,写代码最好规范一点用下面的宏代替我们常用的 keyWindow即可。...@property (nonatomic, assign) GBMaskItemArrowTipPosition tipPosition; 我们新建一个字符串变量赋值文本内容 /** * 提示文本的内容...property (nonatomic, assign) NSTextAlignment textAlignment; 提示文本已经确定好了,现在就是个人中心的蒙版 ?.../** * 绘制椭圆的大小 */ @property (nonatomic, assign) CGSize ovalSize; 我们还需要开放文本和剪头图片控件的试图 /** * 提示文本 */

    1.5K20

    iOS地图找房(类似链家、安居客等地图找房)

    更新PS:原本我是没打算写Demo出来的,但博客发出来后很多人要,因为网络请求不能发出来,请理解。我把Demo中的网络请求全部干掉了,真正做这个项目的可以加入网络请求,或者花点功夫模拟请求。...当点击这个圆形,可以进去小区的房源,这个房源是一个消息框形式的标识,当比例尺在大区,地图移动的时候应该是不允许在更新房源的,当小区的时候,需要更新,而且我们猜测这个更新不能太频繁,可能我们需要设定一个移动距离...同时,大小区的切换,地图放大到某个比例尺切换至小区,地图缩小,切换到大区。 需要做的事情:定义两种标识。添加大区、小区标识。放大缩小后,大小区的判断显示。移动地图大小区的更新。...请更改条件~"]; } }]; } 前面我传进来一个scale来标明到底是大区还是小区。3000代表大区,反之小区。...然后解析数据用一个大头针模型YLAnnotationView 来接收。最终把大头针模型加入地图。这时候就会走大头针的数据源方法了。

    1.5K60

    完美解决UIButton imageView大小控制问题,完美适配iOS13系统图标的降级方案

    最近在更新账号小助手的时候,我发现xcode更新了一系列的系统图标,而且下拉一看都是十分规范而精美的,涵盖的内容也很丰富,这对于我们这样的独立的开发来说可以说是雪中送炭。...最新的图标用起来固然爽,但是需要自己考虑向下兼容 可以看到,这个组件在iOS12或者更早时是无效的,我们如果在代码中用到相关的接口来获取图片对象时,同样也会告警处理低版本兼容问题。...虽然还是回到了用图解决问题,但好在我们在做一些小部分的系统类Icon时候不用再费力去找素材了. 2....UIButton.setImage 都会出现,图片保持了原图的大小这样的问题,并且还是被拉伸的状态。...UIButton下的imageView的size,frame,但是没有任何效果,网上查了很多在这个部分也是毫无收获,后来发现UIButton的图片机制完全是基于 imageEdgeInset 自动计算的

    1.6K20

    在线等,挺急的!

    我没有详实的数据统计来确认各个iOS开发者的日常开发中,MVC各个层面,具体的时间成本如何;单从我个人角度来说, View布局的拆分与转换,占据了我 70% 以上的时间.我们公司通常是按单个完整任务来拆分工作的...,也更快捷些.在此期间,我研究的一个重要话题就是如何实现Xib之间的嵌套复用,即在一个Xib上如何直接嵌入另一个Xib.乍听起来很简单,但是在亲身实践之后,才发现其难度.我不是来吐槽的,个中曲折不再一一赘述...的值,进行不同的处理. @property (assign, nonatomic, readonly) BOOL isTest; //!...* * @return 默认返回self. */ + (instancetype)sharedInstance; /** * 更新视图....此策略已经在我们的项目中试用了一段时间,也已经填了些坑,多次优化,感兴趣的可以直接拿过去用.但是,基于XIB的视图模块化,终究还是需要手动的参与,对工作效率的提升也似乎达到了一个极限:因为它终究需要人工深度参与

    1.4K60

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

    1、CALayer 1)、在ios中,能看得见摸得着的东西基本上都是UIView, 比如按钮、文本标签、文本输入框、图标等,这些都是UIView 2)、UIView之所以能显示在屏幕上,完全是因为它内部的一个图层...,还可以给图层添加动画,来实现一些比较炫酷的效果 6)、CALayer属性:   @property CGRect bounds;     //宽度和高度   @property CGPoint position...默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间 13)、转场动画 --- CATransition   CATransition是CAAnimation...UIColor whiteColor]]; 20 21 [self addImgAndLayer]; //添加子控件 22 [self updateClockTime]; //更新时间...UIImageView *imgView; 9 @property (nonatomic, retain) UIImageView *imgView2; 10 @property (nonatomic, assign

    1.5K30

    iOS学习——tableview中带编辑功能的cell键盘弹出遮挡和收起问题解决

    二 主控制器为UIViewController或其子类   其实最开始我就是用的UITableViewController,结果要提示的要提示的tips总是显示不设定的位置上,后来才得以发现的这个bug...♀️,我们的项目汇总因为用到了MBProgressHUD框架,所以只能是用UIViewController上布局一个UITableView来实现,这样我们再self.view上布局MBProgressHUD...下面的流程就是UITextField或UITextView在整个编辑过程中的详细流程步骤: 在成为第一响应者之前,文本框调用其代理的textFieldShouldBeginEditing:  方法来允许或阻止其第一响应者...  在文本框输入即将结束,即即将注销第一响应者时,系统会调用 textFieldShouldEndEditing: 方法 文本框注销第一响应者,对应的响应时间就是系统收回键盘,并且在隐藏键盘时会发出 UIKeyboardWillHideNotification...在编辑结束之后收起键盘时则也会发送一个UIKeyboardWillHideNotification的通知,所以我们通过监听这两个通知,来采取对应的行动。

    3.9K80

    Core ML简介及实时目标检测及Caffe TensorFlow coremltools模型转换

    可以预见的是,本地化模型必然是发展趋势,对于实时性较高的应用,如:目标检测、自然场景文本识别与定位、实时翻译等,如果通过网络传输到后台分析,网络延迟就足够让用户放弃这个App了,比如微信的扫一扫中有翻译的功能...titleLabel; //退出button @property (nonatomic, strong) UIButton *exitButton; //切换前后摄像头button @property...= [UIButton buttonWithType:UIButtonTypeCustom]; self.exitButton.titleLabel.textColor = [UIColor...python包coremltools就是完成这个事情的,不过这个包只支持caffe和keras,一些第三方的可以支持Tensorflow,不过它支持的操作比较少,有些模型没办法转换,还需要等开发者们继续完善...predicted_feature_name模型输出类别名称,感觉没什么用 Tensorflow模型的转换 Tensorflow用的越来越多了,所以也需要了解一下转换方法,coremltools暂时还不支持

    3.2K70

    关于对类别 延展 协议 一些属性声明词的用法

    比如我们要增加的方法需要实例变量很多 里面要用到很多的实例变量来执行逻辑 那么我们做好的选择是选择继承 下面是例子 #import @interface UIButton...(Add) { //没有办法添加实例变量 } @property (nonatomic, assign) BOOL isHasImage;//可以通过这样添加 @end #import.../这个在制作frameWork的时候经常的用到 在framework他的作用于和@protected一样,在外部和@private一样的 比如UIButton用@package声明的变量只能在framework...的自己类和子类用到 我们创建UIButton的子类无法调用 并且分类也没办法使用 @protected//只能在自己类和子类内部使用 实例变量无法调用 @private//只能自己类内部可以调用 协议...我们一般定义协议用于获取数据和代理出去方法 用DataSource获取数据 用Delegate代理出去方法(你也可以用这个获取数据) 我们可以给基类添加类别 实现自己要实现代理的方法 @protocol

    38030
    领券