uikit

关于swiftUI,看这一篇就够了

為{幸葍}努か 提交于 2020-08-18 22:05:17
SwiftUI是一种新颖的构建UI方式和全新的编码风格,本文以通俗易懂的语言,从Swift 5.1语法新特性和SwiftUI的优势方面进行分享,希望对热爱移动端的同学有一定的帮助,让大家尽可能快速、全面和透彻地理解SwiftUI。 一、背景 苹果于2019年度WWDC全球开发者大会上,发布了基于Swift建立的声明式框架–SwiftUI,其可以用于watchOS、tvOS、macOS等苹果旗下产品的应用开发,统一了苹果平台的UI框架。 正如官网所言Better apps. Less code:用更少的代码构建更好的应用。目前想要体验SwiftUI,需要以下的准备:Xcode 11 beta和macOS Mojave or Higher,如果想要体验实时预览和完整的Xcode 11功能,需要macOS 10.15 beta。 本文主要从以下三个方面讲述SwiftUI的特性: 从代码层面理解Swift 5.1新语法的底层实现; 从数据流方面阐述SwiftUI的黑魔法; 从布局原理层面阐述SwiftUI组件化的优势; 二、SwiftUI的特性 本节对Opaque Result Type, PropertyDelegate, FunctionBuilder三个语法新特性进行讲解,结合部分伪代码和数据流分析,由浅入深地理解,其在SwiftUI中的作用。 2.1 Opaque Result

SwiftUI从入门到实战第2章第6节:Toggle

旧巷老猫 提交于 2020-08-12 20:46:37
相关课程: http://hdjc8.com/hdjc/swiftUI/ Toggle相当于UIKit中的UIToggle,用于实现选项开关(开户或关闭)的功能。 Toggle开关控件的使用非常普遍,例如手机设置页面的蓝牙和飞行模式等功能的选项开关。主要用于标识是否选择某个选项,或者是否激活某项功能。 示例代码: struct ContentView : View { //首先添加一个布尔类型的属性,并设置它的初始值为真。该属性拥有@State绑定包装标记,表示该属性将和开关控件进行数据绑定。 @State var showNotification = true var body: some View { VStack { //然后修改此处的文本视图,作为形状控件的标签。 Text("Show Notification: ") //通过扩展方法,添加另一个文本视图,该文本视图用来显示布尔属性的值。 + Text("\(self.showNotification.description)") .foregroundColor(.green) .bold() //添加一个开关控件,并将它和布尔属性进行绑定。当用户调整开关控件时,该属性的值也将同步发生变化。 Toggle(isOn: $showNotification) { Text("Show notification:") }

总结:iOS中多线程的经典崩溃

妖精的绣舞 提交于 2020-08-12 10:51:37
前言 iOS崩溃是让iOS开发人员比较头痛的事情,app崩溃了,说明代码写的有问题,这时如何快速定位到崩溃的地方很重要。调试阶段是比较容易找到出问题的地方的,但是已经上线的app并分析崩溃报告就比较麻烦了。 本文将给大家总结介绍关于iOS中多线程的一些经典崩溃,下面话不多说了,来一起看看详细的介绍吧。 Block 回调的崩溃 在MRC环境下,使用Block 来设置下载成功的图片。当self释放后,weakSelf变成野指针,接着就悲剧了 __block ViewController *weakSelf = self; [self.imageView imageWithUrl:@"" completedBlock:^(UIImage *image, NSError *error) { NSLog(@"%@",weakSelf.imageView.description); }]; 多线程下Setter 的崩溃 Getter & Setter 写多了,在单线程的情况下,是没有问题的。但是在多线程的情况下,可能会崩溃。因为[_imageView release]; 这段代码可能会被执行两次,oops! UIKit 不是线程,所以在不是主线程的地方调用UIKit 的东西,有可能在开发阶段完全没问题,直接免测。但是一到线上,崩溃系统可能都是你的崩溃日志。Holy shit! 解决办法

iOS14新特性探索之一:App Clips轻应用

随声附和 提交于 2020-08-11 22:56:34
iOS14新特性探索之一:App Clips轻应用 App Clips是苹果WWDC 2020所发布的iOS 14新特性中最具焦点的一项功能。一经曝光,就引发了互联网上针对其特性的各种讨论。有人说App Clips是苹果模仿微信退出的iOS平台的小程序;有人说它是轻量级的应用程序,为用户提供了简洁版的App体验;同样,对AppClips的评价也是众说纷纭,有人看好也有人看跌,有人觉得是新的平台也有人觉得非常鸡肋。 无论如何,AppClips都是Apple给iPhone用户提供了一种新的交互方式和新的应用使用体验,作为开发者,我们更需要做的是了解这样一种新的技术的应用,并将其赋能到我们的产品中,为用户提供更好的使用体验,为产品带来更大的价值。 本篇博客,也是基于这样的想法,将全面的介绍App Clips的应用与开发细节,帮助大家最快的了解与上手这样一种技术。我在编写本篇博客时,使用的依然是iOS14的bate版本,开发工具Xcode的版本也是12.0Bate版本,因此,不能保证后续Apple不会对App Clips的某些特性进行优化修改。如果你在之后很久的某个时间阅读到本篇博客,请有选择的借鉴与吸收。 1. 关于App Clips App Clips用中文如何翻译,一直没有找到合适的词汇。可以叫他应用切片,也可以叫它轻应用,更可以称它为小程序,这些称呼好像都合适又好像都插那么一点感觉

SwiftUI从入门到实战第2章第5节:Segment

若如初见. 提交于 2020-08-11 04:43:33
相关课程: http://hdjc8.com/hdjc/swiftUI/ Segment分段控件,类似于UIKit中的UISegmentedControl。分段控件提供一栏选项按钮,一次只能激活其中一个选项按钮。用于实现若干选项的单选。使用分段拾取器,可以在多个视图区域进行快速的跳转。 示例代码: struct ContentView : View { //给当前的结构体添加一个数组属性,作为Picker列表的数据源。 private var animals = ["🐶 Dog", "🐯 Tiger", "🐷 Pig"] var colors = [Color.yellow, Color.orange, Color.red, Color.purple] //然后添加一个整型属性,作为列表里的处于选择状态的选项的索引值,并给它添加@State绑定包装标记,使该属性和界面中的Picker视图进行数据绑定。 @State private var selectedAnimal = 0 var body: some View { VStack { Picker(selection: $selectedAnimal, label: Text("animals")) { ForEach(0 ..< animals.count) { Text(self.animals[$0]).tag($0) }

2020年面向iOS开发的知识点总结(持续更新中)

扶醉桌前 提交于 2020-08-10 23:57:43
前言: 最近在整理自己的技术栈,收集了一些自己认为比较重要的知识点分享给大家。 Runloop 1.iOS中触摸事件传递和响应原理 2.为什么只有主线程的runloop是开启的 3.为什么只在主线程刷新UI 4.PerformSelector和runloop的关系 5.GCD 在Runloop中的使用? 6.AFNetworking 中如何运用 Runloop? Runtime 1.Category 的实现原理? 2.isa指针的理解,对象的isa指针指向哪里?isa指针有哪两种类型? 3.Objective-C 如何实现多重继承? 4.runtime 如何实现 weak 属性? 5.Objective-C 的消息机制如何理解? 6.runtime具体应用 7.runtime如何通过selector找到对应的IMP地址? 8.简述下Objective-C中调用方法的过程 9.怎么理解Objective-C是动态运行时语言。 KVO 1. 实现原理 2. 通过KVC修改属性会触发KVO么?KVC的赋值和取值过程是怎样的?原理是什么? 3. 哪些情况下使用kvo会崩溃,怎么防护崩溃 4. kvo的优缺点 Block 1. block的内部实现,结构体是什么样的 2. 一个int变量被__block修饰与否的区别? 3. block在修改NSMutableArray,需不需要添加_

iOS开发添加新手引导

让人想犯罪 __ 提交于 2020-08-10 22:47:19
往往项目中经常出现此类需求 用户通过点击引导按钮可响应页面附带按钮的点击事件。 1 // 2 // gzhGuideView.h 3 // GuideView 4 // 5 // Created by 郭志贺 on 2020/5/29. 6 // Copyright © 2020 郭志贺. All rights reserved. 7 // 8 9 #import <UIKit/UIKit.h> 10 11 NS_ASSUME_NONNULL_BEGIN 12 13 @interface gzhGuideView : UIView 14 15 16 -( void )showGuide:(UIView* )view;//显示引导 17 -( void )dismissGuide;//移除 18 19 @end 20 21 NS_ASSUME_NONNULL_END 1 // 2 // gzhGuideView.m 3 // GuideView 4 // 5 // Created by 郭志贺 on 2020/5/29. 6 // Copyright © 2020 郭志贺. All rights reserved. 7 // 8 9 #import " gzhGuideView.h " 10 11 @implementation gzhGuideView 12 -

最新 iOS 框架整体梳理(三)

社会主义新天地 提交于 2020-08-10 03:51:07
这一篇得把介绍框架这个系列终结了,不能超过三篇了,不然太长了..... 还是老规矩,前面两篇的机票在下方: 最新 iOS 框架整体梳理(一) 最新 iOS 框架整体梳理(二) Part - 3 62、Metal MetalKit Metal ( [ˈmetl] ) 这是一个和 OpenGLES 类似的面向底层的图形处理接口,这也是苹果自己搞出来的,所以这个框架我还是推荐要有一个大概的了解。 Metal 系列教程(1)- Metal 介绍及基本使用 (系列文章三篇都是讲述 Metal 的,可以学习一下) iOS渐变二维码之Metal实现篇 官方文档 63、MetalPerdormanceShaders 其实这个 MetalPerdormanceShaders 也是属于Metal的内容,关于它的具体的使用我推荐一篇利用它组高斯迷糊的文章。 学习用MetalPerformanceShaders进行图像处理 官方文档 64、MetricKit 这是一个在 iOS 13 中新加入的框架,iOS 13 中推出了MetricKit,它用于收集和处理电池和性能指标。 iOS MetricsKit 收集电量和性能数据 官方文档 65、MobileCoreServices 要是在iOS10 以后在有一些APP之间跳转的时候是需要这个框架的,我也了解了一下关于这个框架

iOS开发——内存优化

吃可爱长大的小学妹 提交于 2020-08-10 02:16:16
前言: 当app经过一段儿时间的迭代,往往会出现一些性能问题,这时能够协助开发解决这些性能问题也成为我们测试的重要工作。凑巧最近一段时间就一直在协助开发去进行app内存优化。这里整理了一份关于内存优化的心得分享给大家。 目的: 首先我们先要明确我们的目的,在保证程序运行流畅的前提下尽可能的优化使用内存。所以千万不要掉进为了优化而优化的陷阱。程序要先保证能运行,然后再谈良好运转。所以解决问题比较宽泛,必要的时候在交互或者运转机制上小动刀子来保证既能完成任务,程序又能正常运转,不必去对代码进行完全重构。毕竟在优化效率达到上限的时候,只能用时间换空间了。 1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数),它避免了最常见的由于我们忘记释放内存所造成的内存泄露。它自动为你管理retain和release的过程,所以你就不必去手动管理了。编写代码的时候很容易忘掉结尾的release。而ARC会自动在底层为你做这些工作。除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存。 2. 在正确的地方使用 reuseIdentifier 一个开发中常见的错误就是没有给UITableViewCells, UICollectionViewCells设置正确的reuseIdentifier。 为了性能最优化,table

iOS开发——内存优化

家住魔仙堡 提交于 2020-08-08 04:56:41
前言: 当app经过一段儿时间的迭代,往往会出现一些性能问题,这时能够协助开发解决这些性能问题也成为我们测试的重要工作。凑巧最近一段时间就一直在协助开发去进行app内存优化。这里整理了一份关于内存优化的心得分享给大家。 目的: 首先我们先要明确我们的目的,在保证程序运行流畅的前提下尽可能的优化使用内存。所以千万不要掉进为了优化而优化的陷阱。程序要先保证能运行,然后再谈良好运转。所以解决问题比较宽泛,必要的时候在交互或者运转机制上小动刀子来保证既能完成任务,程序又能正常运转,不必去对代码进行完全重构。毕竟在优化效率达到上限的时候,只能用时间换空间了。 1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数),它避免了最常见的由于我们忘记释放内存所造成的内存泄露。它自动为你管理retain和release的过程,所以你就不必去手动管理了。编写代码的时候很容易忘掉结尾的release。而ARC会自动在底层为你做这些工作。除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存。 2. 在正确的地方使用 reuseIdentifier 一个开发中常见的错误就是没有给UITableViewCells, UICollectionViewCells设置正确的reuseIdentifier。 为了性能最优化,table