自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(525)
  • 收藏
  • 关注

原创 将博客搬至CSDN

(为了确认是您本人在申请搬家,请在原博客发表一 篇标题为《将博客搬至CSDN》的文章,并将文章地址填写在上方的"搬家通知博文地址"中。)

2017-07-06 16:46:42 463

原创 swift项目在iOS8 通过init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle

初始化代码:MatchViewControllerPhone(nibName:"MatchViewControllerPhone", bundle: nil) MatchViewControllerPhone类部分代码:class MatchViewControllerPhone: UIViewController     @IBOutlet weak var containe

2017-07-06 16:46:34 1886

原创 iOS10.3中划线失效

NSString *price = @"¥12.3 ¥23.4";//[NSString stringWithFormat: @"¥%@ ¥%@ %@",goodsItemPrice,goodsItemOriginPrice,numByUserStr] ; NSMutableAttributedString *currentPriceStr = [[NSMutableAttribut

2017-07-06 16:46:27 825

原创 iOS的标识符

UDID的全名为 Unique Device Identifier 设备唯一标识符。从名称上也可以看出,UDID这个东西是和设备有关的,而且是只和设备有关的,有点类似于MAC地址。我在博客《iOS从生成证书到打包上架-02》提到了真机调试,然后需要把UDID这个东西添加到Provisoning Profile授权文件中,也就是把设备唯一标识符添加进去,以此来识别某一台设备。  UDID是一个4

2017-07-06 16:46:20 858

原创 管理你的第二屏(airPlay)

需求:1、投射airplay后,有些页面或播放状态没有权限投射时,需要修改第二屏内容;2、游戏时airplay后,iPhone当成手柄使用; 原来:获取第二屏幕信息--->创建一个新的Window--->将新的Window对应的Screen屏幕设置为第二屏幕--->设置新的屏幕的UI显示。 获取第二屏幕信息  @discardableResult publi

2017-07-06 16:46:13 843

原创 OS X中Java版本管理工具jEnv

我们经常需要在Mac中用到多个版本的JDK,6 在Apple下载,7 和 8 要从Oracle下载。自己安装的jdk安装目录:/Library/Java/JavaVirtualMachines  如果你不是通过系统偏好中的 Java 控制面板进行升级,那么你需要手动配置 JAVA_HOME,以指定不同的Java版本。否则,当你安装完新版本 JDK 后,你会发现 java -versio

2017-07-06 16:46:05 662

原创 strong修饰符实现weak效果(对象释放时,属性置nil)

//// NSObject+EZ_Dealloc.h// EZToolKit//// Created by yangjun zhu on 2017/1/6.// Copyright © 2017年 Cactus. All rights reserved.//#import typedef void (^voidBlock)(void);@inte

2017-07-06 16:45:58 592

原创 AVPlayer 截屏(swift3.0)

开始做的是一般的vod视频截屏,用AVAssetImageGenerator对象就可以实现,而且可以截取任意时间点的视频图像片段代码: open func generateThumbnails(times: [TimeInterval],maximumSize: CGSize, completionHandler: @escaping (([EZPlayerThumbnail]) -> S

2017-07-06 16:45:49 1129

原创 OpenGL = Hello World

OpenGL中的大多数函数使用了一种 基于状态 的方法,大多数OpenGL对象都需要在使用前把该对象绑定到context上。这里有两个新名词——OpenGL对象和Context。 ContextContext是一个非常抽象的概念,我们姑且把它理解成一个包含了所有OpenGL状态的对象。如果我们把一个Context销毁了,那么OpenGL也不复存在。 OpenGL对象我们可以

2017-07-06 16:45:41 380

原创 CATransform3D

CATransform3D 的数据结构定义了一个同质的三维变换(4x4 CGFloat值的矩阵),用于图层的旋转,缩放,偏移,歪斜和应用的透视。图层的2个属性指定了变换矩阵:transform 和 sublayerTransform。transform : 是结合 anchorPoint(锚点)的位置来对图层和图层上的子图层进行变化。sublayerTransform:是结合ancho

2017-07-06 16:45:34 340

原创 CMTime

CMTime是专门用于标识电影时间的结构体,通常用如下两个函数来创建CMTimetypedef struct{ CMTimeValue value; /*! @field value The value of the CMTime. value/timescale = seconds. */ CMTimeScale timescale; /*! @field timescale

2017-07-06 16:45:27 2971

原创 UISlider 获取滑块上方坐标&解决滑块两边空隙

获取滑块上方坐标:   比如infoView是上面要显示的坐标,scrubberSlider是UISlider:    self.infoView.hidden = NO;    CGRect trackRect = [self.scrubberSlider convertRect:self.scrubberSlider.bounds toView:nil];//可能scrubb

2017-07-06 16:45:19 1896

原创 多媒体的一些基础概念

音频采样大自然中的声音,他的形态是一种波。我们通过采样,将这种波量化成数据,记录下来,如下图所示:  如上图所示,采样的数据并不能完整的还原出原来的波形,只能做到尽量接近原波形。并且采样率(采样的次数)越高,波形越接近原波形。不过采样的次数增多,必然会导致存储的数据量要增加,所以我们不可能无限提升采样率。经过长期的研究人们发现,当采样率等于波形中最高频率的2倍时,已经足够将波形还原到可

2017-07-06 16:45:12 792

原创 swift Tips(version3.0+ xcode8.0+)

Swift官博swift-evolutionSwift 3 新特性一览Swift Programming Language中文版 新的访问控制fileprivate和open现在的访问权限则依次为:open,public,internal,fileprivate,private。 在swift 3中,新增加了一个 fileprivate来显式的表明,这个元素的

2017-07-06 16:45:03 488

原创 TVOS tips

App Programming Guide for tvOS  All video playback on Apple TV is based on HTTP Live Streaming and FairPlay Streaming. See About HTTP Live Streaming and FairPlay Streaming Overview. For HTTP Liv

2017-07-06 16:44:56 424

原创 iOS10 推送通知整理

iOS 10使用独立的 UserNotifications.framework 来集中管理和使用 iOS 系统中通知的功能。在此基础上,Apple 还增加了撤回单条通知,更新已展示通知,中途修改通知内容,在通知中展示图片视频,自定义通知 UI 等一系列新功能,非常强大。WWDC 视频:https://developer.apple.com/videos/play/wwdc2016/707/

2017-07-06 16:44:48 639

原创 iOS10/sdk10/xcode8/iphone7(+)/swift3适配

Xcode 8 iOS Simulator正常启动打印一堆log:2016-09-18 01:29:58.361152 rrr[5309:313188] subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, d

2017-07-06 16:44:41 2839

原创 React/React Native 的ES5 ES6写法对照表

感谢:http://bbs.reactnative.cn/topic/15/react-react-native-%E7%9A%84es5-es6%E5%86%99%E6%B3%95%E5%AF%B9%E7%85%A7%E8%A1%A8/2很多React/React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends Reac

2017-07-06 16:44:33 241

原创 react native point

React Native项目启动顺序 -iOS中React Native项目启动顺序:在启动React Native Xcode项目时,会先加载项目所依赖的React项目,接着运行React项目中事先定义好的run script phase,最后运行packger.sh。其中packger.sh中我们看到如下的代码:node "$THIS_DIR/../loca

2017-07-06 16:44:26 399

原创 iOS的framework动态库

iOS的静态库有两种,.a和.framework, 动态库.framework居多(还有. dylib). 静态库建议也生成.framework模式的,好处是.framework包含了相关的.h文件等..a文件还要自己添加相关的.h文 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存.系统提供的库基本上都属于此类,例如UIKit等,A

2017-07-06 16:44:16 1056

原创 WebView图片自适应屏幕

- (void)webViewDidFinishLoad:(UIWebView *)webView { NSString *js = @"function imgAutoFit() { \ var imgs = document.getElementsByTagName('img'); \ for (var i = 0; i < imgs.length;

2017-07-06 16:44:09 174

原创 UIModalPresentationFormSheet模式下隐藏键盘

在通常情况下,我们使用UITextField空间来完成输入,点击编辑区域,键盘自动出现,点击Done按钮,键盘自动消失。如果用代码来控制,则是使用becomeFirstResponder和resignFirstResponder来控制键盘的出现/隐藏。      不过如果你在UIModalPresentationFormSheet这种风格的弹出界面时,resignFirstResponder是

2017-07-06 16:44:02 332

原创 图片抗锯齿处理方法

一、这个简单的键-值对添加到您的Info.plist:UIViewEdgeAntialiasing设置为YES。但是这样容易出现性能问题。 二、 对单个 Layer 开启抗锯齿的方法, imageView.layer.allowsEdgeAntialiasing = YES;  //>=ios7 三、image的category- (UIImage *)antiAl

2017-07-06 16:43:55 2079

原创 NSURLSession

NSURLSession 简介NSURLConnection这个名字,实际上指的是一组构成Foundation框架中URL加载系统的相互关联的组件:NSURLRequest,NSURLResponse,NSURLProtocol,NSURLCache,NSHTTPCookieStorage,NSURLCredentialStorage,以及和它同名的NSURLConnection。在WWD

2017-07-06 16:43:48 267

原创 HTTP简介

一、TCP/IP 协议介绍  在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容。TCP/IP协议是分层的,从底层至应用层分别为:物理层、链路层、网络层、传输层和应用层,如下图所示:      从应用层至物理层,数据是一层层封装,封装的方式一般都是在原有数据的前面加一个数据控制头,数据封装格式如下:     其中,对于TCP传输协议,客户端在

2017-07-06 16:43:40 87

原创 CFString​Transform

关于一种语言好不好用,你只需要衡量以下两种指标:API 的统一性String 类的实现质量NSString 是基础类库中的佼佼者。在那个其他语言 仍在 艰难地正理处理 Unicode 的时代,NSString是尤其让人印象深刻的。不仅仅是任何内容扔在它里面就能 正确工作 ,NSString 还能将字符串解析成语法标签、检测出内容中的首要语言,并且在任意你能想到的字符编码中转换。它好

2017-07-06 16:43:32 239

原创 NSProcessInfo

NSProcessInfo对象是用来获取进程的相关信息,包括进程的参数、PID、进程所在的系统的主机名、操作系统名、操作系统版本等等。(UIDevice获设备信息)  @autoreleasepool { //创建一个NSProcessInfo对象,表示当前进程 NSProcessInfo *processInfo = [NSProcessInfo

2017-07-06 16:43:24 280

原创 非侵入性的Carthage包管理工具

https://github.com/Carthage/Carthage  说起 iOS 开发的包管理,大家就不由得会想起 CocoaPods, 它确实是一个强大的工具。但这次咱们来关注另外一个包管理工具 Carthage,如果说 CocoaPods 像一个航母,一应俱全,坚实稳固。那么 Carthage 就像一艘巡洋舰,机动灵活,攻击迅速。 Carthage 和 CoaoaPods

2017-07-06 16:43:17 236

原创 OptionSetType

引言先来看看一个UIView动画在Objective-C和Swift里面分别是怎么写的。[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionAllowUserInteraction animations:^{ // ...

2017-07-06 16:43:10 255

原创 关于GCD开发的一些事儿

感谢:http://www.jianshu.com/p/f9e01c69a46f关于GCD开发的一些事儿字数4560 阅读1379 评论6 喜欢50 在之前我们介绍过NSOperation的一些东西,这次我们来聊一聊另一个iOS开发最经常使用的技术之一 --- GCD,GCD将线程的管理移到系统级别,你只需要定义好要执行的任务,然后丢到合适的Dispatch queue,G

2017-07-06 16:43:02 221

原创 @objc小结

1 、Selector(oc/swift)中调用swift类中私有方法需要在方法前声明 @objc  @objc private func privateSayHello(){        print("\(__FUNCTION__)")    }比如NStime ,performSelector中用到Selector:[video performSelector:@sele

2017-07-06 16:42:55 2174

原创 获取UIViewController的几个方法

从UIWindow获取:@implementation UIWindow (EZ_helper)- (UIViewController*) ez_topMostController{ UIViewController *topController = [self rootViewController]; // Getting topMost ViewC

2017-07-06 16:42:45 871

原创 __attribute__

https://blog.twitter.com/2014/attribute-directives-in-objective-chttp://nshipster.com/__attribute__/http://blog.sunnyxx.com/2014/09/15/objc-attribute-cleanup/   黑魔法__attribute__((cleanup))http:/

2017-07-06 16:42:37 365

原创 swift Tips(version2.0+ xcode7.0+)

打印多重Optional         var literalNil: String?? = nil对于上面变量po只会输出nil(lldb) po literalNil nil但使用 fr v -r 或 fr v -R 可以打印详细信息(lldb) fr v -r  literalNil (String??) literalNil = nil(lld

2017-07-06 16:42:27 359

原创 Swift之Generator/Sequence/Collection

GeneratorSwift中,Generator是任何实现了GeneratorType协议的类或者结构体。Generator可以理解为一个序列生成器。GeneratorType协议要求定义一个名为Element的别名,并实现一个next方法。GeneratorType协议实现如下:protocol GeneratorType{ typealias Element

2017-07-06 16:42:18 940

原创 XCodeGhost

XCodeGhost源码:https://github.com/XcodeGhostSource/XcodeGhost XCodeGhost攻击原理:从传统的利用应用漏洞攻击转为利用编程语言灵活性及开发工具配置修改的攻击,攻击手法隐蔽,攻击代码逆向分析非常具有迷惑性。#本次攻击不是利用某个应用的漏洞进行攻击,而是修改XCode软件的加载动态库配置文件(具体哪个文件不介绍了,毕竟

2017-07-06 16:42:10 429

原创 Swift柯里化(Currying)

什么是柯里化函数:柯里化(英语:Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。简单说:柯里化函数就是,你有一个接收参数的函数,你只提供给它部分的参数,它不是立刻执行而是返回给你一个新的函数,这个新的函数接收剩下的参数,其内部则指向原始函数。当提供的参数完整了才会最终执行原始函数。class

2017-07-06 16:41:57 475

原创 iOS9新特性_更灵活的后台定位

感谢:https://github.com/ChenYilong/iOS9AdaptationTips#1-demo1_ios9%E7%BD%91%E7%BB%9C%E9%80%82%E9%85%8D_ats%E6%94%B9%E7%94%A8%E6%9B%B4%E5%AE%89%E5%85%A8%E7%9A%84https iOS9新特性_更灵活的后台定位【iOS9在定位的问题上,有一个

2017-07-06 16:41:48 282

原创 WatchConnectivity

WatchConnectivity是watchOS2里iPhone与AppleWatch通信的基础框架。初始化设置WatchConnectivity的原理是iPhone伴侣应用和AppleWatch上运行的WatchKit Extension之间通过WCSession会话进行通信。 当前Controller若需要响应WatchConnectivity的消息需要遵循WCSessionDe

2017-07-06 16:41:40 530

原创 Complications on the watch face

watchOS2支持自定义表盘的Complication(苹果把表盘上显示的每一个控件称之为Complication)。苹果已经做使定制Complication在watchOS2的非常好的工作。WatchoOS现在包含ClockKit(表盘开发工具包),他包含了所有可定制化的Complication类型。自定义表盘的工作方式是非常简单的,只需要你的Watch Extension提供实现CLKCom

2017-07-06 16:41:32 722

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除