Swift中的异步编程方式 引 说到异步编程,我们很容易想到的编译回调。无论是需要并行的耗时任务,还是允许串行的简单任务,都通过回调的方式返回结果。回调也是在开发中使用最为广泛的一种异步编程方式。...Swift从代码层面提供了结构化的方式来支持异步编程,在Swift5.5中引入了async和await相关的关键字。...需要注意,异步和并行本身是两个概念,在Swift中,异步编程模型已经建立在线程调度之上,这也就是说,我们无需关心其中线程的调用,异步的函数本身就是在子线程中并行执行的,线程切换和调度全有语言本身控制。...任务组与任务 当有多个异步任务需要执行时,可以将其添加到一个任务组中,当任务组所有任务完成后再进行统一的返回。...,其中可以添加多个子任务,任务组之间有非常明确的关系,这种编程方式也被称为结构化编程,当然,Swift也提供了非结构化的编程方式,即需要开发者处理任务之间的关系。
而Swift除了可以面向对象编程,它还可以面向协议编程。那可不可以也用协议来解决情况呢?...嘿嘿,这个可以有,那我们接下来就来试试怎么通过协议的方式来避免上述情况,并且实现一行代码添加空白页功能 前言 如果对面向协议有疑问的同学可以看下我之前的两篇文章 iOS - Swift 面向协议编程...(一) iOS - Swift 面向协议编程(二) 之前的文章中提到了,协议除了起规范作用,还有别一个用处,就是赋予能力。...,非常地恰巧,我们定义的方法lxf_EmptyDataSet需要外界将UIScrollView传递进来,在DZNEmptyDataSet的数据源方法和代理方法也有scrollView。...可以使用Cocoapods的方式来安装使用 pod 'LXFProtocolTool' 我也将 iOS - Swift 面向协议编程(二) 中提及的通过协议便捷加载xib的功能也集成了进来。
比如一些界面中有父视图的尺寸由子视图的尺寸来确定的;还比如UIScrollView中为了能实现滚动需要根据添加到里面的子视图来调整contentSize的尺寸;又比如某些UITableViewCell中的高度是动态的...为此当UIScrollView要和AutoLayout进行结合使用并实现滚动能力的话就不能直接将所有子视图都添加到UIScrollView中去, 而是需要中间建立一个容器视图,首先将容器视图添加到UIScrollView...2.UIScrollView的滚动 MyLayout&TangramKit对于处理和UIScrollView进行结合时进行特殊处理,当将一个布局视图添加到滚动视图时,布局系统内部会负责处理滚动视图的contentSize...要实现UIScrollView滚动时,只需要在一个滚动视图内添加一个布局视图,然后将所有其他子视图都添加到这个布局视图中去,这个和上面的AutoLayout的处理方式是一样的,最后将布局视图的尺寸自适应属性设置为...这里只介绍将MyLayout&TangramKit的布局视图加入到AutoLayout布局体系中去的一些方法。 1.将布局视图添加到非布局父视图中 因为布局视图也是一个视图,都是从UIView派生。
在处理Excel文件时,经常需要对单元格进行样式设置,在此博客中,小编将重点介绍如何使用葡萄城公司的服务端表格组件——GrapeCity Documents for Excel(以下简称GcExcel)...和 VerticalAlignment 属性以编程方式对齐文本,如下所示: worksheet.Range["A1"].HorizontalAlignment = HorizontalAlignment.Center...它接受 ReadingOrder 枚举中的值,如下所示: worksheet.Range["A1"].ReadingOrder = ReadingOrder.RightToLeft; 可以将 Orientation...例如,若要对区域中的唯一值应用条件格式,需要将 AddUniqueValue 的规则添加到 FormatConditions 集合中,如下面的代码所示: IUniqueValues condition...借助 GcExcel,可以使用工作簿的 Styles 集合以编程方式将这些快速样式应用于单元格或单元格区域,并将其作为值提供给 IRange.Style 属性,如下所示: worksheet.Range
通过一个 UIScrollView 的扩展,可以轻松为 UIScrollView 的所有子类添加下拉刷新功能。...SnapKit - 就是“snap”, --swift 喜欢自动布局吗?当然喜欢!至少在storyboard中创建时会喜欢。...Cartography - Cartography 是用来声明 Swift 中的 Auto Layout,无需输入任何 stringly 就可设置自己 Auto Layout 的约束声明。...UIView-FDCollapsibleConstraints - 一个AutoLayout辅助工具,最优雅的方式解决自动布局中子View的动态显示和隐藏的问题。...EasyPeasy.swift - 编程方式自动布局框架库。
自动布局 02 Mar 2016 Comments 前言 最近遇到一个复杂视图:根控制器里面有上下两个子控制器,子控制器中各自实现类似PageView的视图,然后PageView的每一页是一个WebView...采用子控制器的原因是因为防止所有的逻辑代码都混在根控制器中,所以没有使用nicklockwood 的iCarousel 或SwipeView ,而是采用了之前一直在用的SCPageViewController...记录下自动布局中遇到的几个坑。...self.isBigger; }]; button;}); 关于UIScrollView的自动布局 上面提到的页面遇到了多重的UIScrollView,使用自动布局的时候也是够蛋疼的。...主要注意点为: UIScrollView自身的约束按照正常的视图添加。 内部子控件的约束不能按照UIScrollView来设置,同时必须完整,否则撑不起contentSize。
前言 本文源自实际开发中的需求,核心的要求有几个: 1、多个UITableview要支持左右滑动; 2、点击Tab也要有UITableview的滑动切换效果; 3、每个UITableview单独的下拉刷新和上拉加载...contentSize = CGSizeMake(self.view.width * 4, 0); // 写0,关闭vertical的滚动 viewWithTag 具有传递性 代码中存在5个UIScrollView...当UIScrollView直接添加到self.view的属性上时,如果automaticallyAdjustsScrollViewInsets为YES,会调整UIScrollView的inset以适应status...但是实际开发中,在VC的viewDidLoad方法中将其设置为NO,并没有生效,UIScrollView依旧下滑了20pt。...这时候,有的人可能会采用一种解决方案,比如在viewWillAppear的时候,把offset改回去; 或者另一种的解决方案:用UIView把UIScrollView装起来,再把UIView添加到VC.view
关于使用面向协议来封装功能的实战可以参考我上篇文章 【iOS 面向协议方式封装空白页功能】,这里就不再赘述,我们直接进入使用阶段吧。...本篇文章只有一个目的,那就是只要遵守协议,一行代码随意切换全屏~ 如果对面向协议有疑问的同学可以看下我之前的两篇文章 iOS - Swift 面向协议编程(一) iOS - Swift 面向协议编程...是否进入全屏 specifiedView UIView? 指定即将全屏的视图 superView UIView?...UIViewController, FullScreenable { } 2、指定视图进入全屏 lxf.enterFullScreen(specifiedView: cyanView) 3、指定视图退出全屏,并添加到当前控制器的...lxf_FullScreenable_3 结语 到这里相关的说明已罗列完毕,有什么不清楚的可以下载Demo看看,或者在文章下方留言提问 LXFProtocolTool 主要是通过协议的方式来方便快捷地实现一些的实用功能
由于视图由视图控制器管理,所以讨论视图的加载方式时,主要讨论视图控制器的加载方式。 通过Storyboard加载:这是苹果推荐的方式。...这需要我们在loadView 方法中,通过编程创建自己的视图层次,并且把把根视图赋值给UIViewController的view属性。...2、UIWindow的主要作用有: 1.作为UIView的最顶层容器,包含应用显示所有的UIView; 2.传递触摸消息和键盘事件给UIView; 把view添加到uiwindow 3、把view...添加到uiwindow上面 (1)直接将控制器的view添加到UIWindow中,并不理会它对应的控制器 [self.window addsubview:vc.view]; (2)设置uiwindow...的根控制器,自动将rootviewcontroller的view添加到window中,负责管理rootviewcontroller的生命周期 [self.window.rootviewcontroller
关于Autolayout和Masonry自动布局的几个坑 自动布局 02 Mar 2016 0 Comments 前言 最近遇到一个复杂视图:根控制器里面有上下两个子控制器,子控制器中各自实现类似PageView...采用子控制器的原因是因为防止所有的逻辑代码都混在根控制器中,所以没有使用nicklockwood的iCarousel或SwipeView,而是采用了之前一直在用的SCPageViewController...记录下自动布局中遇到的几个坑。...self.isBigger;}];button;}); 关于UIScrollView的自动布局 上面提到的页面遇到了多重的UIScrollView,使用自动布局的时候也是够蛋疼的。...主要注意点为: UIScrollView自身的约束按照正常的视图添加。 内部子控件的约束不能按照UIScrollView来设置,同时必须完整,否则撑不起contentSize。
对于我们的可缩放图像视图,我们将利用UIScrollView的缩放和平移功能。...我们希望能够以编程方式和通过Interface Builder使用PanZoomImageView,所以让我们处理不同的初始化器,并创建一个通用的init。...我们将通过在我们的类中添加imageName字符串,并在字符串改变时更新UIImageView来实现。...试试平移和缩放(如果你使用的是模拟器,按住 "option "键)--你会对你的图像有一个全新的视角 以编程方式初始化视图 在使用界面生成器时,这很好--但如果你想以编程方式初始化视图呢?...让我们给我们的类添加另一个初始化器,这样我们就可以在代码中设置图像名称。 medium.com/media/074d4… 就这样了!现在我们可以像这样通过图片名称以编程方式初始化我们的视图了。
1 简介 UIScrollView 是负责滚动的视图。苹果最强大的地方就在于其良好的UI展示,和UE体验。如果不会很好的使用UIScrollView,就等于丧失了苹果一般的法力。...普通的 UIView 不具备滚动功能,不能显示过多的内容。...alloc]initWithImage:[UIImage imageNamed:@"002"]]; _imageView = imageView; // 把scrollVIew添加到...- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ return self.imageView; 正在缩放时调用的方法...和普通的内边距作用相反,不是让内容向里面缩进。是在不改变原有的contentSize基础上,让scrollView中的内容向四周多滚动一些。
= [UIColor grayColor]; //这里是个重点,要记得设置autoLayout之前一定要把view添加到父视图上,不然会报错 [self addSubview:view];...^(MASConstraintMaker *make) { //将View居中到父视图上 很好理解吧 make.center.equalTo(self); //将size设置成300...这里要注意的一点就是Masonry中能够添加AutoLayout的一共有三个函数。...在UIScrollView顺序排列一些View并自动计算contentSize //在UIScrollView顺序排列一些View并自动计算contentSize UIScrollView *scrollView...可以看出 scrollView的内部已如我们所想排列好了 这里的关键就在于container这个view起到了一个中间层的作用 能够自动的计算UIScrollView的contentSize 横向或者纵向排列等间隙的一组
方式加载 通过 UINib 方式加载 使用与UIView子类源文件关联的xib Bundle - (NSArray *)loadNibNamed:(NSString *)name...UIView view.addSubview(testView) } 使用与 UIViewController 子类源文件关联的 xib Demo HomeViewController.swift...awakeFromNib() 方法 将 nib 中可见的控件显示出来 本地化 两种策略 App 本地化跟随系统语言 App 内部有一个可以设置语言的选项 本地化介绍 Base 文本的本地化 利用 NSLocalizedString...用 External Object 重构 VC 只能在于 xib IB 中的关键字总结 Swift @IBAction @IBOutlet @IBDesignable @IBInspectable...IB 中,但是源文件必须是 UIView 或者 NSView 的子类。
当一起使用时,运动和动态成为用户体验工具的重要组成部分,使您的交互栩栩如生。用户将通过看到它以自然,动态的方式回应他们的行为。...这些属性是隐式解包的optionals(如类型名称后面的!所示)。 这些属性必须是可选的,因为我们没有在init方法中初始化它们。...碰撞对象需要知道它应该与之交互的每个视图; 因此将障碍添加到物品列表中允许碰撞物体也作用于障碍物。...因此,如果以编程方式更改对象的框架或转换属性,则可以预期这些值将被覆盖。 这意味着当它处于动态的控制之下时,不能使用变换来缩放对象。...然后创建一个新的捕捉行为,将方块对齐到用户的触摸位置,并将其添加到动画制作工具中。 构建并运行应用程序。
scroll.bounces = false scroll.backgroundColor = .blue return scroll}()private lazy var headerView: UIView...= { let view = UIView(frame: .zero) view.backgroundColor = .red return view}()private lazy...undefinedMOMultiTabContainerViewController内部是一个scrollView,添加多个subScrollView,结构如下:(详情可见MOMultiTabContainerViewController.swift...containerWidth, height: containerHeight - headerHeight)}----5、传递滑动回调将所有滑动回调都交由...:/// 更新 scrollView 的 offset, 相同时跳过,防止极限情况死循环private func updateScrollView(_ scrollView: UIScrollView,
的autolayout添加函数 将所需的约束添加到block中行了 [sv mas_makeConstraints:^(MASConstraintMaker *make) { //将sv居中(很容易理解吧...1.1.4 [中级] 在UIScrollView顺序排列一些view并自动计算contentSize UIScrollView *scrollView = [UIScrollView new];...这里的关键就在于container这个view起到了一个中间层的作用能够自动的计算uiscrollView的contentSize。...简洁明了的达到了我们所要的效果 1.2 高级开发技巧 1.2.1 更新layout 1.2.1.1 mas_updateConstraints 使用Masonry创建constraint来定义布局的方式有三种...的下一个runloop中执行的,所以如果要在布局完成后顺序执行某些处理(例如开始进行自定义绘制或者异步绘制),最好手动放到main_queue的下一个runloop中执行,确保布局完成后才开始执行代码。
, 默认样式 UIScrollViewKeyboardDismissModeOnDrag, // dismisses the keyboard when a drag begins 设定键盘的消失方式为拖拉页面.../34.缩小到特定区域的内容,所以它是在接收器中可见 - (void)zoomToRect:(CGRect)rect animated:(BOOL)animated NS_AVAILABLE_IOS(...scrollView将开始降速的时候调用 - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView; //48. scrollView...)scrollView; //50.返回一个放大或者缩小的视图 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;...:2.0 target:self selector:@selector(nextPage:) userInfo:@"123" repeats:YES]; // 修改NSTimer在NSRunLoop中的模式
一、使用的基本原则: 原则1:UIScrollView的size依赖于subviews 首先在StoryBoard中拖入一个UIScrollView,用Pin按钮,随意设置其布局。...二、正确的姿势 1、在StoryBoard中拖入一个UIScrollView。 2、设置UIScrollView的约束。...例如Pin上、下、左、右边距都为0,此时UIScrollView将占据整个ViewController’s view的界面。...3、拖入一个UIView作为ScrollView的子控件,这个控件就是作为容纳真正布局中控件的父控件,比如命名为contentView。...即contentSize必须根据contentView的4条边来确定,而不是根据别的方式。这样,UIScrollView就把contentSize的4条边和contentView的4条边关联起来了。
什么是Masonry Masonry是一个对系统NSLayoutConstraint进行封装的第三方自动布局框架,采用链式编程的方式提供给开发者API。...Masonry采取了链式编程的方式,代码理解起来非常清晰易懂,而且写完之后代码量看起来非常少。...所以,添加到UIScrollView上的子视图,对UIScrollView添加的约束都是作用于contentView上的。...这种方式的实现,主要是依赖于创建一个containerView内容视图,并添加到UIScrollView上作为子视图。...UIScrollView原来的子视图都添加到containerView上,并且和这个视图设置约束。
领取专属 10元无门槛券
手把手带您无忧上云