南山忆的技术博客

回忆是抓不住的月光,握紧就变黑暗

0%

Apple 在今天凌晨发布了全新一代的操作系统iOS10.0beta,今天在第一时间用iPhone6sP更新了该系统,现在通过系统截图给大家带来第一手的体验。

  iOS10的锁屏界面改变较大,原有的“向右滑动解锁”功能被“按下主频幕按钮以打开”替换,也就是说第一下按点亮屏幕,再按一下方可解锁。如果使用Touch ID还是直接解锁。但是新加入的拿起亮屏,放下熄屏。真的很赞,要看一下时间,直接拿起屏幕就点亮。锁屏界面左滑出现widget,等控件。

Read more »

你是不是见多了各种大v的个人博客,是不是也想拥有这样的一个个人博客,(静静的装B!)看这里,就对了。一步一步教你创建自己的博客。
  现在用的比较多的就是hexo(快速、简洁且高效的博客框架),支持markDown,有丰富的插件和主题

安装环境

  安装gitNode.js,git就不用多说了,如果连git都不会装,请出去把门关上。
  Node.js 的安装可以使用两种方法,1、点击前面链接直接下载安装即可 2、通过终端命令行:

1
$ curl https://raw.github.com/creationix/nvm/master/install.sh | sh

之后重启终端,如果还找不到nvm命令可尝试重启电脑
接着执行

1
$ nvm install 4

即可安装完成
以上两个条件已具备的话,即可开始安装hexo博客框架

1
$ npm install -g hexo-cli

执行完成后hexo就安装成功了,第一步结束,环境配置完毕可以开始创建自己的博客了

Read more »

JS 与 OC 的交互原来没有好好研究过,用的都是比较简单拦截 Url 的方式,通过定义专用的 Url 来拦截关键字来进行特定处理。但这只能用于简单的传值,进行一些简单的交互。涉及到,JS 调用 OC 方法或者 OC 调用 JS 方法,一些比较复杂的交互逻辑的时候这种方式就显得力不从心了。满足不了我们的需求。当然也有比较好的第三方库如:WebViewJavascriptBridge。但一般系统的方法足够用的时候,就没必要使用第三方库。这样即有利于减小安装包体积,又可以减少第三方的不稳定性等因素的干扰

拦截url的方式,进行简单交互

  在webView的代理方法中处理
  这里简单介绍一下 URL 里面的一些属性

1
2
3
4
5
NSString *scheme = url.scheme;//协议:http
NSString *host = url.host;//主机名
NSNumber *port = url.port;//端口号
NSString *path = url.path;//一般用来表示主机上的一个目录或文件地址
NSString *query = url.query;//参数,发给服务器的参数

Read more »

二维码的生成有好多第三方库,如Z-Xing。但是为了控制安装包的大小,或者并不需要其他的一些额外的功能,用系统的方法即可满足.

二维码的生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
- (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size waterImageSize:(CGFloat)waterImagesize{
CGRect extent = CGRectIntegral(image.extent);
CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));

// 1.创建bitmap;
size_t width = CGRectGetWidth(extent) * scale;
size_t height = CGRectGetHeight(extent) * scale;
//创建一个DeviceGray颜色空间
CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
//CGBitmapContextCreate(void * _Nullable data, size_t width, size_t height, size_t bitsPerComponent, size_t bytesPerRow, CGColorSpaceRef _Nullable space, uint32_t bitmapInfo)
//width:图片宽度像素
//height:图片高度像素
//bitsPerComponent:每个颜色的比特值,例如在rgba-32模式下为8
//bitmapInfo:指定的位图应该包含一个alpha通道。
CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
CIContext *context = [CIContext contextWithOptions:nil];
//创建CoreGraphics image
CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];

CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
CGContextScaleCTM(bitmapRef, scale, scale);
CGContextDrawImage(bitmapRef, extent, bitmapImage);

// 2.保存bitmap到图片
CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
CGContextRelease(bitmapRef); CGImageRelease(bitmapImage);

//原图
UIImage *outputImage = [UIImage imageWithCGImage:scaledImage];
//给二维码加 logo 图
UIGraphicsBeginImageContextWithOptions(outputImage.size, NO, [[UIScreen mainScreen] scale]);
[outputImage drawInRect:CGRectMake(0,0 , size, size)];
//logo图
UIImage *waterimage = [UIImage imageNamed:@"icon_imgApp"];
//把logo图画到生成的二维码图片上,注意尺寸不要太大(最大不超过二维码图片的%30),太大会造成扫不出来
[waterimage drawInRect:CGRectMake((size-waterImagesize)/2.0, (size-waterImagesize)/2.0, waterImagesize, waterImagesize)];
UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newPic;
}
Read more »

  最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究了一下相机的自定义。
  相机属于系统硬件,这就需要我们来手动调用iPhone的相机硬件,分为以下步骤:

Read more »

3D touch也出了很长时间了,这次花时间好好研究了一下,把经验与大家分享一下

主界面重按APP图标,弹出Touch菜单

 静态快速选项
   (iOS数组)给APP指定静态主屏幕的快速选项,这个键包含了一个字典数组,每个字典包含关于一个快速选项的详细信息。你可以指定静态快速选项给你的APP用一个字典数组。

 UIApplicationShortcutItems (iOS数组)给APP指定静态主屏幕的快速选项,这个键包含了一个字典数组,每个字典包含关于一个快速选项的详细信息。你可以指定静态快速选项给你的APP用一个字典数组。

Read more »