uikit

iOS学习——获取iOS设备的各种信息

纵饮孤独 提交于 2020-05-06 02:14:05
  不管是在Android开发还是iOS开发过程中,有时候我们需要经常根据设备的一些状态或信息进行不同的设置和性能配置,例如横竖屏切换时,电池电量低时,内存不够时,网络切换时等等,我们在这时候需要进行一些友好的提示和保护设备的一些设置。在Android开发中我们可以通过 DeviceUtil这个工具类来获取设备网络状态、电池电量等各种状态信息,那么在iOS开发中,我们是否也能获取到设备的各种状态信息呢?答案是肯定的,本文就主要来学习一下在iOS开发过程中如何获取到设备的各种状态信息。   在iOS中要获取设备的状态信息,主要涉及到三个类:UIDevice、NSbundle和NSlocale。这三个类分别对应不同的信息: UIDevice是设计到设备的状态信息最多最常用的一个类,主要用于获取类函数及状态通知,可以检测手机电量、定位、感应、机型、当前系统版本等等。 NSbundle是一个目录,其中包含了程序会使用到的资源,这些资源包含了图像、声音、编译好的代码,通过这些亦可获取一些应用信息。 NsLocale可以获取用户的本地化信息,如货币、语言、国家、数字、日期格式、地理位置显示等等。 一 UIDevice   通过UIDevice可以获取到的信息非常多,UIDevice类展示了一些关键的特定于设备的属性,包括使用的iPhone ,Ipad或iPod Touch型号、设备名称

Hybrid App: 了解原生JavaScriptCore框架是如何让JavaScript与Native实现混合开发

这一生的挚爱 提交于 2020-05-05 16:27:52
一、简介 Hybrid Development混合开发是目前移动端开发异常火热的新兴技术,它能够实现跨平台开发,极大地节约了人力和资源成本。跨平台开发催生了很多新的开源框架,就目前而言,在混合开发中比较流行的有FaceBook开源React Native,有Goggle开源的Flutter。React Native实现的是通过下发JS脚本的方式达到JS与Native交互。Flutter实现的则是通过采用现代响应式框架来构建UI,Flutter与ReactiveCocoa框架配合使用最佳。当然开发者也可以在Native中内嵌WebView的方式(WebKit)实现混合开发。虽然方式不同,但目的相同,都是跨平台,殊途同归吧。对跨平台有了粗略的了解后,再来看看iOS系统中对JS与Native是如何交互的,其实,系统是给开发者提供了一个极其强大的框架来实现这个功能的,即JavaScriptCore框架。这个框架通过定义JSValue值对象和声明JSExport协议作为桥梁完成Native与JS的通信。JS虽然是单线程语言,但是iOS是支持多线程执行任务的,开发者可以在异步情况下执行任意一个环境的JavaScript代码。大概结构图如下: 二、分析 参考这上图,可以看出JavaScriptCore框架结构还是很清晰的,JavaScriptCore中有那么几个核心的类在开发者是很常用的

iOS-电池图标【结合贝塞尔曲线控制电量显示】

这一生的挚爱 提交于 2020-05-04 07:17:13
基于UIView类:WKJBatteryView WKJBatteryView.h #import <UIKit/UIKit.h> @interface WKJBatteryView : UIView /* * value:0 - 100 */ - ( void )setBatteryValue:(NSInteger)value; @end WKJBatteryView.m #import " WKJBatteryView.h " @interface WKJBatteryView() /// 电池宽度 @property (nonatomic,assign) CGFloat b_width; /// 电池高度 @property (nonatomic,assign) CGFloat b_height; /// 电池外线宽 @property (nonatomic,assign) CGFloat b_lineW; @property (nonatomic,strong) UIView * batteryView; @end @implementation WKJBatteryView - (instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { [self

Swift programmatically-added constraints dont work

不羁岁月 提交于 2020-04-30 06:46:07
问题 I have a view inside a scrollview: Now I want to add the child views to that view programmatically. Thats my code to do that: Child view (works) //Adds header to the view again because it was removed in the clear() method //Header is just a label lv.addSubview(header) header.leadingAnchor.constraint(equalTo: header.superview!.leadingAnchor).isActive = true header.topAnchor.constraint(equalTo: header.superview!.topAnchor, constant: 2).isActive = true header.widthAnchor.constraint(equalTo:

In SwiftUI, how can I add a video on loop as a fullscreen background image?

回眸只為那壹抹淺笑 提交于 2020-04-30 06:38:30
问题 I have a video thats around 10 seconds long that I'd like to play on a loop as a fullscreen background image in one of my SwiftUI Views. How can I implement this? First idea was working with Swift's import AVFoundation , but not sure if this is the right path. 回答1: You can use the AV family of frameworks and UIViewRepresentable to do this: import SwiftUI import AVKit import AVFoundation struct PlayerView: UIViewRepresentable { func updateUIView(_ uiView: UIView, context:

iOS---学习研究大牛Git高星项目YYCategories(二)

那年仲夏 提交于 2020-04-29 15:34:50
转载请注明出处。 本文是接着上一篇博客 iOS---学习研究大牛Git高星项目YYCategories(一) 三、YYCategoriesMacro.h 一个宏定义类,我会把这一块的功能说一下。 tip1: Q : 在项目的 .h 文件中, #ifndef XXX_h #define XXX_h //程序段1 #endif /* XXX_h */ 的作用? A : 如果 XXX.h 不存在,就引入 XXX.h ,否则不用引入. 是为了防止该文件被重复引用. #什么是重复引用: 其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include "a.h" 和#include "c.h" 此时就会造成c.h重复引用。 #头文件被重复引用引起的后果: 有些头文件重复引用只是增加了编译工作的工作量,不会引起太大的问题,仅仅是编译效率低一些,但是对于大工程而言编译效率低下那将是一件多么痛苦的事情。 有些头文件重复包含,会引起错误,比如在头文件中定义了全局变量(虽然这种方式不被推荐,但确实是C规范允许的)这种会引起重复定义。 扩展: Q : #if , #ifdef , #ifndef 的使用方法? A : #1,#2,#3 . #1 #if

IOS Html富文本渲染方式:DTCoreText、WKWebView、UIWebView的内存占用对比

回眸只為那壹抹淺笑 提交于 2020-04-29 14:09:39
在app的内容页(详情页)中,富文本的显示一直是经常需要处理的问题,而通常在后端的富文本编辑中,Html应用比较普遍,所以其实需要处理的Html富文本显示的问题,以下这三种方式肯定不是最优的显示Html富文本的方式,只是相对简单的解决方案,对前后端的转换要求少,可以快速集成。 以下对这3种方式进行内存的测试对比,毕竟详情页是相对比较大,而且打开频率高的页面,所以内存占用是必须要考虑的问题。 基本环境: Objective-C Xcode 6.4 Deployment Target IOS 8.0 DTCoreText 版本:1.6.16 说明: DTCoreText:第三方富文本显示组件,支持Html转换为 NSAttributedString; WKWebView:IOS 的WebKit框架的浏览器组件,从IOS 8.0 开始支持; UIWebView:IOS 的UIKit框架的浏览器组件,从IOS 2.0 开始支持; 测试方法: 使用3个组件分别显示一个web页面的内容(例如: http://news.dayoo.com/guangzhou/201512/11/139995_45489706.htm ); 页面加载完后,清空内容,再次加载内容,重复3次; 比较3个组件所占用的内存情况; 内存调试工具:Instruments 测试结果: DTCoreText WKWebView

SDWebimage相关知识点1-- 线程

你说的曾经没有我的故事 提交于 2020-04-25 13:15:04
一 线程 (thread)是组成进程的子单元,操作系统的调度器可以对线程进行单独的调度。实际上,所有的并发编程 API 都是构建于线程之上的 —— 包括 GCD 和操作队列(operation queues)。 多线程可以在单核 CPU 上同时(或者至少看作同时)运行。操作系统将小的时间片分配给每一个线程,这样就能够让用户感觉到有多个任务在同时进行。如果 CPU 是多核的,那么线程就可以真正的以并发方式被执行,从而减少了完成某项操作所需要的总时间。 NSThread 是 Objective-C 对 pthread 的一个封装。通过封装 直接使用线程可能会引发的一个问题是,如果你的代码和所基于的框架代码都创建自己的线程时,那么活动的线程数量有可能以指数级增长。这在大型工程中是一个常见问题。例如,在 8 核 CPU 中,你创建了 8 个线程来完全发挥 CPU 性能。然而在这些线程中你的代码所调用的框架代码也做了同样事情(因为它并不知道你已经创建的这些线程),这样会很快产生成成百上千的线程。代码的每个部分自身都没有问题,然而最后却还是导致了问题。使用线程并不是没有代价的,每个线程都会消耗一些内存和内核资源。 二 GCD Grand Central Dispatch 通过 GCD,开发者不用再直接跟线程打交道了,只需要向队列中添加代码块即可,GCD 在后端管理着一个 线程池 。GCD

iOS网络请求-AFNetworking源码解析

。_饼干妹妹 提交于 2020-04-24 17:47:45
趁着端午节日,自己没有什么过多的安排,准备花4-5天左右,针对网络请求源码AFNetworking和YTKNetwork进行解析以及这两年多iOS实际开发经验(其实YTKNetwork也是对AFNetworking的深度封装),结合多个实际项目,分别针对这两个网络框架,进行封装使用(可以直接使用)。本篇主要讲解AFNetworking源码解析,都是自己亲自看AFNetworking源码以及心得体会,大约看下来需要20-30分钟。欢迎指正!!! AFNetworking源码地址: https://github.com/AFNetworking/AFNetworking 针对AFNetworking封装: https://www.cnblogs.com/guohai-stronger/p/9193465.html YTKNetwork的源码详解: https://www.cnblogs.com/guohai-stronger/p/9194519.html 一.AFNetworking的代码结构: 新的代码结构将AFNetworking.h放到了Supporting Files里面。 自从AFNetworking结构更改以后,结构可能不够清晰,以前的版本是这样的: 其实没有多少改变,从这张图可以看出:除去Support Files,可以看到AF分为如下5个功能模块: 网络通信模块(最核心

AFNetworking源码解析与面试考点思考

走远了吗. 提交于 2020-04-24 16:48:18
最近重读了AFNetworking 3.x的源码,算是温故而知新吧。也梳理了一些优秀的代码细节和面试考点,罗列下来,发现这个库小而精致,简直初学者的宝藏库。 开源库怎么看? 先说个题外话,阅读优质的开源代码库,绝对是程序员们快速提升自我的有效途径,而怎样高效率的去阅读源码同样也是一个问题,不知道有没有人和我之前一样,碰到过读倒是读了,但总感觉收获不大的情况。 这里分享一下我的一些读码经验: 多思考,多抛出问题,比如说 整体的代码结构是怎样的?类与类之间的关系是怎样的?为什么要这么设计? 代码有没有涉及到多线程,其线程模型是怎样的?哪类问题可以适用这种多线程的方案? 代码中使用了哪些设计模式?具体是怎么实现的? 也可以关注代码细节,遇到不熟悉的用法不要放过,多刨根究底才能夯实基础 关于 AFNetworking 的一些优秀代码细节,我这里也整理了一部分,可以查阅后文 一定要记笔记和总结,能分享更好。 参考费曼学习法,我认为这一点是最好的加深理解和强化记忆的手段。随着年龄的增大,记忆力会有所衰退,有个笔记能够回顾,能节约大把再次记忆的时间。此外,多与人分享还能够提升自己的影响力,与人交流验证,也能够为自己查缺补漏。 AFNetworking 3.x的代码结构 还是说回到 AFNetworking 这里,AF的代码结构大部分人应该都了解,这里我简单介绍下。 AFNetworking 3