开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
博客专区 - 开源中国社区

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

【YFMemoryLeakDetector】人人都能理解的 iOS 内存泄露检测工具类

时过境迁,今天在网上搜了下 “iOS 内存泄露检测”,各种讨论技术文章,有点头大。我忍不住看了下自己当时的代码,突然感觉自己的思路好特别,好有创意。我真的就是在“创建”时把数据记录到一个字典里,在“释放”时,从字典里移出对象;所谓的检测,其实就是打印那个字典,仍然在字典中的很有可能就是泄露喽。
ios122 发布于 2天前 阅读 67

swift 事件传递工具组件的 封装

#一、对于多层逆传 1. 在开发过程中,避免不了事件、数据的逆传,因为喜欢,所以大多数逆传都至少要串4层,而这些都用block、代理传递?想像一下你要定义多少的block属性、方法,或者代理对象、协议?崩溃! 2. 多层逆传,如果用通知,那肯定很爽,但是会浪费很多的内存空间,消耗性能。 --- #二、组件思路 1. 其实与其说组件不如说是一个工具,因为他确实很小。 2. 在NSObject分类中,添加一个block属性,这个属性要用懒加载 3. 对外暴露两个方法,一个是发送信息的方法,另外一个是接受发送的消息的方法。 --- #三、实际代码 代码不多,但是却是省去了很多代码 **1. 定义block类型** block有两个参数: `signalKey`:区分事件的key `messageObj`: 传递的数据 ``` typealias EVENTCALLBACKBLOCK = (_ signalKey: String, _ messageObj: Any)->(Any)? ``` **2. 发送消息函数** 发送消息函数参数 `signalKey`: 区分事件的key `message` : 传递的数据 `return` : 返回的数据 `` ``` @discardableResult public func sendSignalFunc (signalKey SignalKey: String, message Message: Any) -> (Any)? { var eventBlock: EVENTCALLBACKBLOCK? = objc_getAssociatedObject(self...
LiYaoPeng 发布于 2天前 阅读 48

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

SylixOS下Shell命令行执行模块内函数

本文档介绍了在Shell命令行执行内核模块内函数实现原理。  
zhywxyy 发布于 2天前 阅读 12

Android自定义View:关于打钩小动画的思考重构

> Github地址:TickView,一个精致的打钩小动画 [https://github.com/ChengangFeng/TickView](https://github.com/ChengangFeng/TickView) 先上效果图,不然读不下去了,right? **动图** ![动图.gif](http://upload-images.jianshu.io/upload_images/956714-54cdce326517b896.gif?imageMogr2/auto-orient/strip) **静态图** ![静态图](http://upload-images.jianshu.io/upload_images/956714-82e91058c278cae2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) --- ## 1. 回顾 [【Android自定义View:一个精致的打钩小动画】](https://my.oschina.net/u/3729212/blog/1574969) 上一篇文章,我们已经实现了基本上实现了控件的效果了,但是...但是...过了三四天后,仔细看回自己写的代码,虽然思路还在,但是部分代码还是不能一下子的看得明白... 我的天,这得立马重构啊~ 恰好,有个简友 [ChangQin](http://www.jianshu.com/u/601bff1a5d52) 模仿写了一下这个控件,我看了后觉得我也可以这样实现一下。 ## 2. 深思 关于控件绘制的思路,可以去看看 [上一篇文章](https://my.oschina.net/u/3729212/blog/1574969),这里就不再分析了。 这里先来分析一下上一篇文章里...
陈岗不姓陈 发布于 1周前 阅读 277 评论 2

控制器加载的玄机

# loadView 1. 作用:加载控制器的view 2. 何时调用:当控制器的view第一次使用的时候就会调用 3. 使用场景:只要想自定义控制器的view就调用此方法 访问控制器的View就相当于调用控制器中的view get方法 ``` -(UIView *)view{ if(_view == nil){ [self loadView]; [self viewDidload]; } return _view; } ``` # 控制器加载view的流程 ![2017-7-16-01.png](http://upload-images.jianshu.io/upload_images/2287777-b6128646373dfffb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) * 控制器的init方法底层会调用initWithNibName方法 MyViewController *vc = [[MyViewController alloc] init]; 注意点: * 系统做判断的前提提条件:没有指定nibName;没有自定义loadView方法;控制器以...Controller命名 * 判断原则: * 1、判断下有没有指定nibName,如果指定了就去加载nib * 2、判断有没有跟控制器同名的xib,但是xib的名称不带Controller的xib,如果有就去加载 * 3、如果第二步没有指定,就判断有没有跟控制器类名同名的xib,如果有就去加载 * 4、如果没有任何xib描述控制器的view,就不加载xib ## MyViewController加载view的处理 * 判断有没有指定xibName,如...
杭城小刘 发布于 1周前 阅读 34

iOS第三方平台集成组件化续集(以插件化的方式添加自定义的第三方平台)

iOS平台以组件化和插件化的方式集成第三方平台
aron1992 发布于 2周前 阅读 105

关于处理按键长按不用onKeyLongPress的另一种解决方案

近期项目中需要处理按键长按事件,所以使用onKeyLongPress()进行了处理,但同时自己也发现了另一种处理长按的方式。首先来介绍一下使用onKeyLongPress()的相关方法。 一、onKeyLongPress使用 1.在onKeyDown()方法中,使用event.startTracking()  使用onKeyLongPress必须使用event.startTracking()  先定义一个布尔值,表示是否长按 private boolean isLongPress = false; 然后在onKeyDown()方法中 if (keyCode == KeyEvent.KEYCODE_ENTER) { if (event.getRepeatCount() == 0) { event.startTracking(); isLongPress = false; Toast.makeText(this, "key单击", Toast.LENGTH_SHORT).show(); } else { isLongPress = true; } return true; } 2.在onKeyLongPress()中写自己需要的代码 @Override public boolean onKeyLongPress(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER) { isLongPress = true; Toast.makeText(this, "长按", Toast.LENGTH_SHORT)....
明月春秋 发布于 2周前 阅读 113

中国车牌号码规则-民用、警队、军队等

这份文档是我在工作过程中整理出来的,现在公司已同意将车牌号码相关项目开源。文档也同时开放了。
陈小锅 发布于 2周前 阅读 801 评论 5 点赞 5

iOS 中的 Delayed Transition

iOS 动画,用的最多的也最顺手的是 **animateWithDuration**, 总感觉它有点 **Delayed Transition** 的感觉,应该也可以实现类似的执行批量动画的效果.以前,大都是在 Block 里面写某一个视图,某一个属性的变化后的值.那加入里面,同时写多个视图的多个属性变化的值,会发生什么事呢?
ios122 发布于 3周前 阅读 175

Android TV开发

翻译原文:[https://developer.android.com/training/tv/start/start.html#run](http://https://developer.android.com/training/tv/start/start.html#run) # 开始创建TV 电视应用程序的开发与手机和平板电脑具有相同的结构,这就意味着你可以稍微修改你现在已经开发好的程序,然后运行在电视上面,或者根据你已经掌握的android开发知识去创建开发TV应用。 ==注意:== 你开发的TV应用程序必须满足google play 特定的规范要求才可以发布,有关更多信息,请参见 [TV App Quality](https://developer.android.com/develop/quality-guidelines/tv-app-quality.html)所列出的需求 ## 确定你的电视所支持的媒体格式 请参阅下面的文档,了解Android TV支持的多媒体编码格式、协议和格式的信息。 - [Supported Media Formats](https://developer.android.com/guide/topics/media/media-formats.html) - [DRM](https://source.android.com/devices/drm) -[ android.drm](https://developer.android.com/reference/android/drm/package-summary.html) - [ExoPlayer](https://developer.android.com/guide/topics/media/exoplayer.html) - [android.media.MediaPlayer](https://develo...
啊毛毛 发布于 3周前 阅读 275

CyclicBarrier源码分析

CyclicBarrier源码分析 首先分析CyclicBarrier的核心方法await public int await() throws InterruptedException, BrokenBarrierException { try { return dowait(false, 0L); } catch (TimeoutException toe) { throw new Error(toe); // cannot happen; } } public int await(long timeout, TimeUnit unit) throws InterruptedException, BrokenBarrierException, TimeoutException { return dowait(true, unit.toNanos(timeout)); } 可以看出不管是否带超时,但将会调用方法dowait方法 private int dowait(boolean timed, long nanos) throws InterruptedException, BrokenBarrierException, TimeoutException { final ReentrantLock lock = this.lock; lock.lock(); try { final Generation g = generation; if (g.broken) throw new BrokenBarrierException(); if (Thread.interrupted()) { breakBarrier(); ...
BingZhong 发布于 3周前 阅读 100

放弃java转战kotlin,我的心路历程

没有伞的孩子,只能努力奔跑。
HzhiBo 发布于 4周前 阅读 190 评论 1

AndroidStudio3 支持 Java8 了,就问你敢用吗

今天早上,Google 发布了 AS 3.0,以及一系列的 Support 包,有意思的新东西挺多,因为之前一直在看 kotlin的支持,特地翻了一下对 Java8 的支持方式,结果……
kymjs张涛 发布于 4周前 阅读 740 评论 5

iOS第三方平台集成组件化

### 背景 项目使用到了一些第三方平台的登录、分享、支付功能,包括了微信、微博、QQ平台登录分享和支付宝、微信平台的支付,使用的是原生的接入配置集成的,功能上基本上对照着SDK的开发文档就能够成功的集成了。但是问题也后面也渐渐的暴露出来了,第三方平台的登录、分享、支付功能不同平台的的SDK实现方式还是有很大的差别的,包括了输入的参数以及回调方式都有差别很大,如果只是简单的按照文档集成,那么一定会遇到代码调用结构很乱,回调杂乱不统一的问题,更为严重的是,后面如果添加删除一个第三发平台,那么修改变得很困难和难以维护,这违反了软件开发中的开闭原则,所以考虑到了把这部分代码做一个重构。 ### 结果 项目实现了添加和删除第三方平台的可扩展,添加或者删除第三发平台只要增加或者移除对应的类和配置即可,不会涉及到已有的代码,客户端的调用也不影响。 [我是代码,欢迎点我👉👉YTThirdPlatformManager](https://gitee.com/dhar/YTThirdPlatformManager) 这篇文章的续集 [iOS第三方平台集成组件化续集](https://my.oschina.net/FEEDFACF/blog/1573080) 介绍了在这个架构的基础上使用pod库的特性,更进一步的进行了模块化和解耦的处理,每个第...
aron1992 发布于 4周前 阅读 233 点赞 1

利用Activity实现一个简单的可输入对话框

## 1、需求分析 在应用中这样那样的评论总是少不了的,有的应用是在底部直接加一个EditText和一个Button,让用户输入文字或者表情之后点击按钮提交;而有的虽然也放置了EditText,但仅仅是一个“摆设”,并不具备输入功能,用户点击它后会弹出一个跳转到一个可以真正编辑的页面或者弹出一个可以输入内容的对话框。比如下面这种效果: [![效果图](https://gitee.com/linyulong/EditDialogDemo/raw/master/%E5%8F%AF%E8%BE%93%E5%85%A5%E5%AF%B9%E8%AF%9D%E6%A1%86.gif "效果图")](https://gitee.com/linyulong/EditDialogDemo/raw/master/%E5%8F%AF%E8%BE%93%E5%85%A5%E5%AF%B9%E8%AF%9D%E6%A1%86.gif "效果图") 这里的效果可以细分为四点: 1. 点击底部的按钮之后会弹出对话框,对话框在布局的底部; 2. 对话框中有输入框EditText,可以输入内容; 3. 对话框弹出后EditText会自动获取焦点,弹出软键盘; 4. 软键盘会把对话框顶上去,便于用户编辑。 一开始我想到的是PopupWindow,但是由于里面有EditText,与软键盘交互起来很是头疼,于是改用了Activity。这样一来我们就可以像用Activity一样使用这个对话框,方便多了。不过毕竟跟我们平时使用的Activity还是有所不同的,特...
Lindroid 发布于 1个月前 阅读 353

Spring cloud 微服务安全解决方案

这里我谈谈在实施微服务项目中的心得,首先项目采用 Spring cloud 方案,Spring cloud 有自己的RestController 控制器,我们需要遵循他的规范开发,这就限制了很多传统的认证加密方法不能应用到 Spring cloud中。
neo-chen 发布于 1个月前 阅读 679 评论 3

一种全新的分布式用户认证架构设计

前言 分布式用户认证, 有个简单的称谓就是单点登陆, 即一处登陆,到处通行. 说详细一点就是,集中的用户统一身份认证和分布的式的用户验证和资源访问控制. 对于小公司而言,提供的服务少,常常用户认证和服务混合在一起,体会不到分布式用户认证好处. 随着公司规模的扩大,提供的服务越来越多,把用户认证和服务提供拆分开来,实现分布式用户认证,可降低系统的相互依赖性,提高系统的可扩展性. 常见的方案 基于普通token的方案. 这个方案通常在用户登录后,把用户信息储存与中心服务器, 同时给客户端一个普通token, 以后访问服务时均以此token识别用户身份. 这个token只是一个hash值,一个唯一的ID,自身不含用户信息,要辨别token的真伪,需要的中心服务器查询,这是一个集中用户认证的方案,简单易用,当可扩展性不高. 本文介绍一个新的方案 基于JSON Web Token(JWT)的方案. JWT,简单的说就是把用户的公开信息和信息的签名合成一个字符串,保证信息无法伪造.详细可参考互联网上的资料。 JWT 和基于hash值的普通token的主要不同点: JWT 自身包含用户的公开信息。 JWT 不用到中心服务器查询就可验证真伪。 这些特点,使得JWT 很像现实生活中的身份证,签证等证件。 这个方案,通过用户登陆...
黄洪清 发布于 1个月前 阅读 284 评论 5 点赞 1

iOS11新特性:新增拖拽交互体验

在Mac软件开发时,拖拽交互是一种十分常用的交互方式,在iOS以前的系统中要实现拖拽交互往往比较困难。iOS11新引入了拖拽相关的API可以帮助开发者快速的构建拖拽交互,在iOS11中,使用这种API进行APP的开发为设计提供了一种全新维度的用户交互方式。
珲少 发布于 1个月前 阅读 309

Android计步模块优化(今日步数)

最近在项目中研究计步模块,主要功能记录当天步数,类似微信运动,支付宝计步,咕咚今日步数。 [本篇文章简书地址](http://www.jianshu.com/p/cfc2a200e46d)
jiahongfei 发布于 1个月前 阅读 1056 评论 5 点赞 2

React Native 轻松集成统计功能(iOS 篇)

最近产品让我加上数据统计功能,刚好极光官方支持数据统计 支持了 React Native 版本 ## 第一步 安装: 在你的项目路径下执行命令: ``` npm install janalytics-react-native --save npm install jcore-react-native --save react-native link ``` ## 第二步 配置: ReactNative iOS 端配置步骤在插件中自动完成,无需额外的配置。 ## 第三步 使用 接下来在 JS 文件中只要导入 JAnalyticsModule 就可以调用它的接口了: ``` import JAnalyticsModule from 'janalytics-react-native'; JAnalyticsModule.setup({appKey: "you appKey get from jiguang website"}) // iOS 端需要先调用该方法 ``` ## 调用 API #### startLogPageView(params) 这个方法表示开始记录页面统计,在生命周期中调用: ``` componentDidMount() { var param = { pageName: "main" }; JAnalyticsModule.startLogPageView(param); } ``` #### stopLogPageView(params) 这个方法表示结束记录页面统计,在生命周期中调用: ``` componentWillUnmount() { var param = { pageName: "main" }; JAnalyticsModule.stopLogPageView(param); } ``` #### postEvent(event) 上报统计事件,目前事件分为:CountEv...
极光推送 发布于 1个月前 阅读 194

APP研发流程图

# APP研发流程图 ![APP研发流程图](https://static.oschina.net/uploads/img/201711/25001231_nXiq.png "APP研发流程图")
treebug 发布于 4小时前 阅读 4

抓包工具Charles —— 破解、抓包入门

Charles工具官网:https://www.charlesproxy.com/ Charles工具下载地址:https://www.charlesproxy.com/download/ Charles破解包下载地址:http://pan.baidu.com/s/1boV4w2r 密码:kqtj   一、破解说明: Charles是一个Mac和Windows平台都可以使用的抓包工具,它的破解激活非常简单。只需要拷贝对应版本的charles.jar文件到安装路径中替换原文件即可。 例如: Charles安装目录为 “D:\Charles4.1.4",将下载好的破解包中的charles.jar文件复制到 “D:\Charles4.1.4\lib” 目录下替换原来的文件即可 上面提供的破解包链接对应的Charles版本是4.1.3(本人使用该包破解Charles4.1.4也没有什么问题)。 二、使用说明: 1.使用前注意事项:     1)如果抓取手机的数据包,则手机和抓包使用的电脑必须在同一局域网内(如:链接同一个wifi)     2)抓包所使用的电脑的防火墙必须关闭 2.手机代理设置(如果不是抓取手机数据包,则这一步可以忽略):     2.1 打开电脑端命令端口,输入ipconfig查看电脑的ip地址,操作步骤如下(针对windows):         1)使用快捷键(win+r)打开window程序快速检索窗口(在电脑右下角显示):                 ...
山水-黄 发布于 3个月前 阅读 25

【YFMemoryLeakDetector】人人都能理解的 iOS 内存泄露检测工具类

时过境迁,今天在网上搜了下 “iOS 内存泄露检测”,各种讨论技术文章,有点头大。我忍不住看了下自己当时的代码,突然感觉自己的思路好特别,好有创意。我真的就是在“创建”时把数据记录到一个字典里,在“释放”时,从字典里移出对象;所谓的检测,其实就是打印那个字典,仍然在字典中的很有可能就是泄露喽。
ios122 发布于 2天前 阅读 67

swift 事件传递工具组件的 封装

#一、对于多层逆传 1. 在开发过程中,避免不了事件、数据的逆传,因为喜欢,所以大多数逆传都至少要串4层,而这些都用block、代理传递?想像一下你要定义多少的block属性、方法,或者代理对象、协议?崩溃! 2. 多层逆传,如果用通知,那肯定很爽,但是会浪费很多的内存空间,消耗性能。 --- #二、组件思路 1. 其实与其说组件不如说是一个工具,因为他确实很小。 2. 在NSObject分类中,添加一个block属性,这个属性要用懒加载 3. 对外暴露两个方法,一个是发送信息的方法,另外一个是接受发送的消息的方法。 --- #三、实际代码 代码不多,但是却是省去了很多代码 **1. 定义block类型** block有两个参数: `signalKey`:区分事件的key `messageObj`: 传递的数据 ``` typealias EVENTCALLBACKBLOCK = (_ signalKey: String, _ messageObj: Any)->(Any)? ``` **2. 发送消息函数** 发送消息函数参数 `signalKey`: 区分事件的key `message` : 传递的数据 `return` : 返回的数据 `` ``` @discardableResult public func sendSignalFunc (signalKey SignalKey: String, message Message: Any) -> (Any)? { var eventBlock: EVENTCALLBACKBLOCK? = objc_getAssociatedObject(self...
LiYaoPeng 发布于 2天前 阅读 48

【整理】ios11适配 以及会有的坑 持续更新。。。

1、iPhone X尺寸问题 分辨率1125*2436  (375*812) 导航栏为 44+44  原来为20+44 底部tabbar  49+34  其余屏幕 49+0   2、打印线程问题 Main Thread Checker: UI API called on a background thread: -[UIApplication statusBarOrientation] PID: 49130, TID: 336237, Thread name: (none), Queue name: WriteLogQueue, QoS: 0 造成原因是因为原本 需要在主线程执行的代码 被放在了子线程里边 解决方法:在scheme 里边取消主线程检测 (如下图   不建议使用) 或者修改代码 把出问题的代码放在主线程里边即可 我这里目前发现了shareSDK 内部有状态栏设置在子线程 出现打印问题   3 、automaticallyAdjustsScrollViewInsets 在ios11 系统下需要使用contentInsetAdjustmentBehavior 代替 否则会出现问题 需要注意 UIScrollViewContentInsetAdjustmentBehavior 是一个枚举类型,值有以下几种: -automatic 和scrollableAxes一样,scrollView会自动计算和适应顶部和底部的内边距并且在scrollView 不可滚动时,也会设置内边距. -scrollableAxes 自动计算内边距. -never不计算内边距 -always 根据safeAreaInsets 计算内边距 很显然,我们这里要设置为 never   4、判断ios11 系...
冰泪_ 发布于 2个月前 阅读 3241

Java基础总结第(3)天

二.面向对象 1.面向对象思想: (1)概述:面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的是将功能封装进对象,强调具备功能的对象。 (2)思想特点: A:是符合人们思考习惯的一种思想;B:将复杂的事情简单化了;C:将程序员从执行者变成指挥者; 比如我们要达到某种结果,我就寻找能帮我达到该结果的功能的对象,如我要洗衣服我就买洗衣机,至于怎么洗我不管。 (3)特征: 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式。 继承:多个类中的存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类就无需再定义这些属性和行为,只要继承那个类即可。 多态:一个对象在程序不同运行时刻代表的多种状态,父类或者接口的引用指向子类对象。 2.类和对象 类:对现实世界中的某些事物的描述,是抽象的,概念上的定义。 对象:事物具体存在的个体。 3.成员变量和局部变量的区别(重点) (1)作用域 成员变量:针对整个类有效。 局部变量:只在某个范围内有效。(一般指的是方法,语句体内) (2)存储位置 成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。 局部变量:在方法被调用,或者语句被执行的时候存...
wtyicy 发布于 1天前 阅读 14

这位新同事又矮又重,凭啥是阿里P8?

前两天,蚂蚁金服入职了一位新同事 又矮(145CM)又重(80KG) 一来就是高级技术专家! 据说他还特招美女们喜欢 把那些程序员给嫉妒得…… 前几天他还代表公司登上了央视! 几秒钟就破解了几十年都没搞定的世界难题! 不信你看↓04:39 这位新同事就是ZOLOZ(蚂蚁佐罗) 他上周五参加了央视一套的「机智过人」节目 只用了几秒钟 唰唰就给出了同卵四胞胎兄弟的正确排序 要知道连他们的亲爷爷都经常搞错呢! 人脸识别中多胞胎识别的世界级难题, 就这么被矮重白给攻破了…… 当场把撒贝宁、江一燕给镇住了…… 图灵奖唯一华人获得者姚期智还现场拍板 送他直接进入中国人工智能年度盛典 这样的同事我们还有很多个 不信请戳   原文连接
乐乎无趣 发布于 14小时前 阅读 12

中国车牌号码规则-民用、警队、军队等

这份文档是我在工作过程中整理出来的,现在公司已同意将车牌号码相关项目开源。文档也同时开放了。
陈小锅 发布于 2周前 阅读 801 评论 5 点赞 5

如何让Android WebView访问更快

Android WebView 缓存加速
yale8848 发布于 2个月前 阅读 424

放弃java转战kotlin,我的心路历程

没有伞的孩子,只能努力奔跑。
HzhiBo 发布于 4周前 阅读 190 评论 1

java的坑

try和finally try{ System.out.println("try..."); return; } finally { System.out.println("finally..."); } 上面的代码会打印出"finally...",即使return掉了,还是会执行finally的代码。
kyle960 发布于 17小时前 阅读 8

Android自定义View:关于打钩小动画的思考重构

> Github地址:TickView,一个精致的打钩小动画 [https://github.com/ChengangFeng/TickView](https://github.com/ChengangFeng/TickView) 先上效果图,不然读不下去了,right? **动图** ![动图.gif](http://upload-images.jianshu.io/upload_images/956714-54cdce326517b896.gif?imageMogr2/auto-orient/strip) **静态图** ![静态图](http://upload-images.jianshu.io/upload_images/956714-82e91058c278cae2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) --- ## 1. 回顾 [【Android自定义View:一个精致的打钩小动画】](https://my.oschina.net/u/3729212/blog/1574969) 上一篇文章,我们已经实现了基本上实现了控件的效果了,但是...但是...过了三四天后,仔细看回自己写的代码,虽然思路还在,但是部分代码还是不能一下子的看得明白... 我的天,这得立马重构啊~ 恰好,有个简友 [ChangQin](http://www.jianshu.com/u/601bff1a5d52) 模仿写了一下这个控件,我看了后觉得我也可以这样实现一下。 ## 2. 深思 关于控件绘制的思路,可以去看看 [上一篇文章](https://my.oschina.net/u/3729212/blog/1574969),这里就不再分析了。 这里先来分析一下上一篇文章里...
陈岗不姓陈 发布于 1周前 阅读 277 评论 2

iOS11新特性:新增拖拽交互体验

在Mac软件开发时,拖拽交互是一种十分常用的交互方式,在iOS以前的系统中要实现拖拽交互往往比较困难。iOS11新引入了拖拽相关的API可以帮助开发者快速的构建拖拽交互,在iOS11中,使用这种API进行APP的开发为设计提供了一种全新维度的用户交互方式。
珲少 发布于 1个月前 阅读 309

利用Activity实现一个简单的可输入对话框

## 1、需求分析 在应用中这样那样的评论总是少不了的,有的应用是在底部直接加一个EditText和一个Button,让用户输入文字或者表情之后点击按钮提交;而有的虽然也放置了EditText,但仅仅是一个“摆设”,并不具备输入功能,用户点击它后会弹出一个跳转到一个可以真正编辑的页面或者弹出一个可以输入内容的对话框。比如下面这种效果: [![效果图](https://gitee.com/linyulong/EditDialogDemo/raw/master/%E5%8F%AF%E8%BE%93%E5%85%A5%E5%AF%B9%E8%AF%9D%E6%A1%86.gif "效果图")](https://gitee.com/linyulong/EditDialogDemo/raw/master/%E5%8F%AF%E8%BE%93%E5%85%A5%E5%AF%B9%E8%AF%9D%E6%A1%86.gif "效果图") 这里的效果可以细分为四点: 1. 点击底部的按钮之后会弹出对话框,对话框在布局的底部; 2. 对话框中有输入框EditText,可以输入内容; 3. 对话框弹出后EditText会自动获取焦点,弹出软键盘; 4. 软键盘会把对话框顶上去,便于用户编辑。 一开始我想到的是PopupWindow,但是由于里面有EditText,与软键盘交互起来很是头疼,于是改用了Activity。这样一来我们就可以像用Activity一样使用这个对话框,方便多了。不过毕竟跟我们平时使用的Activity还是有所不同的,特...
Lindroid 发布于 1个月前 阅读 353

SylixOS下Shell命令行执行模块内函数

本文档介绍了在Shell命令行执行内核模块内函数实现原理。  
zhywxyy 发布于 2天前 阅读 12

嵌入式码农的10年Bug调试经验!

1.事件顺序。在处理事件时,提出下列问题会很有成效:事件可以以不同的顺序到达吗?如果我们没有接收到此事件会怎么样?如果此事件接连发生两次会怎么样?哪怕通常不会发生,但系统(或交互系统)其他部分的bug可能会导致事件发生呢。   2.过早。这是第一点“事件顺序”的一个特例,但它确实会引起一些棘手的bug,因此我把它单独拎出来说明。例如,如果信令消息在配置和启动程序完成之前就被过早接收,那么可能就会有很多奇怪的行为发生。另一个例子:连接在被放进空闲列表之前就被标记为down。在调试这类问题时,我们总是假定在空闲列表中的时候连接被设置为down(但当时为什么不把它放到列表外面呢?)。这是我们思考的不足,没有考虑到有时候事情会过早发生。   3.悄无声息的故障。一些最难跟踪的bug有部分是由那些静静失败并扩展而不是抛出错误的代码所导致的。例如,没有检查代码却返回错误的系统调用(如bind)。又如:解析代码在它遇到错误元素的时候只是返回而非抛出错误。在错误状态中持续了一段时间的调用,会使调试变得更难。最好一旦检测到故障就返回错误。   4.If。有若干条件的if语句,if (a 或 b) ,特别是当有链接的时候, if (x) else if (y),都给我引...
muliuhai 发布于 7天前 阅读 14

Android-------ListView列表中获取EditText输入的值

最近项目的购物车中用列表中包含了留言功能, 需要获取EditText输入的内容,当购买多件商品时,就有点棘手了。 经过查资料解决了这个功能,并写了一个案例;    效果图:       可以在商品数据用一个字段来管理留言数据,这样就可以方便的操作了。  代码: public class MainActivity extends AppCompatActivity { ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView(){ listView=(ListView)findViewById(R.id.listview); listView.setAdapter(new ListAdapter(this)); } public void saveEditData(int position, String str) { Toast.makeText(this,str+"----"+position,Toast.LENGTH_LONG).show(); } } Adapter public class ListAdapter extends BaseAdapter { Context context; LayoutInflater inflater; String[] strings=new String[]{"商品1","商品2","商品3"}; public ListAdapter(Context c...
切切歆语 发布于 2个月前 阅读 55

AndroidStudio3 支持 Java8 了,就问你敢用吗

今天早上,Google 发布了 AS 3.0,以及一系列的 Support 包,有意思的新东西挺多,因为之前一直在看 kotlin的支持,特地翻了一下对 Java8 的支持方式,结果……
kymjs张涛 发布于 4周前 阅读 740 评论 5

sed(二)

扩展:sed应用 sed 指定行范围匹配(sed打印1到10行包含某字符串的行) [root@adai003 grep]# sed -n '1,10 {/oo/p}' test.txt root:x:0:0:root:/root:/bin/bash 3233:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin sed删除某关键字的下一行到最后一行 [root@adai003 grep]# head -n5 test.txt root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin 234:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin 3233:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@adai003 grep]# sed '/daemon/{p; :a; N; $!ba; d}' test.txt root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin 234:x:2:2:daemon:/sbin:/sbin/nologin 解析:定义一个标签a,匹配c,然后N把下一行加到模式空间里,匹配最后一行时,才退出标签循环,然后命令d,把这个模式空间里的内容全部清除。 匹配打印某关键字符所在行以及下一行 [root@adai003 grep]# sed -n '/daemon/{N;p}' test.txt 234:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin...
芬野de博客 发布于 19小时前 阅读 6

AFNetworking之于https认证

写在开头: 本来这篇内容准备写在AFNetworking到底做了什么?(三)中的,但是因为我想在三中完结这个系列,碍于篇幅所限、并且这一块内容独立性比较强,所以单独拎出来,写成一篇。 本文从源码的角度,去分析AFNetworking对https的认证过程。旨在让读者明白我们去做https请求: 如果使用AF,需要做什么。 不使用的话,直接用原生NSUrlSession,又需要做什么。 当我们使用自签证书的https,又需要注意哪些问题。 单独看并不影响阅读。如果有需要了解更多AF相关内容,可以关注楼主的系列文章: AFNetworking到底做了什么? AFNetworking到底做了什么?(二) 那么正文开始了: 简单的理解下https:https在http请求的基础上多加了一个证书认证的流程。认证通过之后,数据传输都是加密进行的。 关于https的更多概念,我就不赘述了,网上有大量的文章,小伙伴们可以自行查阅。在这里大概的讲讲https的认证过程吧,如下图所示: 1. 客户端发起HTTPS请求 这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。 2. 服务端的配置 采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通...
云上飞飞 发布于 14小时前 阅读 5

如何让Android WebView访问更快

Android WebView 缓存加速
yale8848 发布于 2个月前 阅读 424

Android自定义View:关于打钩小动画的思考重构

> Github地址:TickView,一个精致的打钩小动画 [https://github.com/ChengangFeng/TickView](https://github.com/ChengangFeng/TickView) 先上效果图,不然读不下去了,right? **动图** ![动图.gif](http://upload-images.jianshu.io/upload_images/956714-54cdce326517b896.gif?imageMogr2/auto-orient/strip) **静态图** ![静态图](http://upload-images.jianshu.io/upload_images/956714-82e91058c278cae2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) --- ## 1. 回顾 [【Android自定义View:一个精致的打钩小动画】](https://my.oschina.net/u/3729212/blog/1574969) 上一篇文章,我们已经实现了基本上实现了控件的效果了,但是...但是...过了三四天后,仔细看回自己写的代码,虽然思路还在,但是部分代码还是不能一下子的看得明白... 我的天,这得立马重构啊~ 恰好,有个简友 [ChangQin](http://www.jianshu.com/u/601bff1a5d52) 模仿写了一下这个控件,我看了后觉得我也可以这样实现一下。 ## 2. 深思 关于控件绘制的思路,可以去看看 [上一篇文章](https://my.oschina.net/u/3729212/blog/1574969),这里就不再分析了。 这里先来分析一下上一篇文章里...
陈岗不姓陈 发布于 1周前 阅读 277 评论 2

【整理】ios11适配 以及会有的坑 持续更新。。。

1、iPhone X尺寸问题 分辨率1125*2436  (375*812) 导航栏为 44+44  原来为20+44 底部tabbar  49+34  其余屏幕 49+0   2、打印线程问题 Main Thread Checker: UI API called on a background thread: -[UIApplication statusBarOrientation] PID: 49130, TID: 336237, Thread name: (none), Queue name: WriteLogQueue, QoS: 0 造成原因是因为原本 需要在主线程执行的代码 被放在了子线程里边 解决方法:在scheme 里边取消主线程检测 (如下图   不建议使用) 或者修改代码 把出问题的代码放在主线程里边即可 我这里目前发现了shareSDK 内部有状态栏设置在子线程 出现打印问题   3 、automaticallyAdjustsScrollViewInsets 在ios11 系统下需要使用contentInsetAdjustmentBehavior 代替 否则会出现问题 需要注意 UIScrollViewContentInsetAdjustmentBehavior 是一个枚举类型,值有以下几种: -automatic 和scrollableAxes一样,scrollView会自动计算和适应顶部和底部的内边距并且在scrollView 不可滚动时,也会设置内边距. -scrollableAxes 自动计算内边距. -never不计算内边距 -always 根据safeAreaInsets 计算内边距 很显然,我们这里要设置为 never   4、判断ios11 系...
冰泪_ 发布于 2个月前 阅读 3241

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

中国车牌号码规则-民用、警队、军队等

这份文档是我在工作过程中整理出来的,现在公司已同意将车牌号码相关项目开源。文档也同时开放了。
陈小锅 发布于 2周前 阅读 801 评论 5 点赞 5

我的编程回忆录

当一名黑客是初中的理想, 后来当一名程序员是我的理想, 现在我的理想,是想经商,也许是因为基因的影响(再干个几年,准备离职,回家种地卖水果,远离加班,远离焦虑,也许身体会健康,头发不会越来越少,生活也有节奏一些)。 什么时候都不会晚,只要肯努力.
冰雪情缘l 发布于 2周前 阅读 76 点赞 1 打赏 1

9 大跨平台移动 App 开发工具推荐

如今,移动应用开发已经变得越来越重要,开发人员面临最大的挑战之一就是在多个平台上运行应用程序。最新的应用程序代码支持“一次编写,到处运行”(WORA)的概念,即只要在一个平台上编写代码一次,就可以在多个平台运行。本文我们将为大家介绍 9 个优秀的移动 App 开发工具,帮你在短时间内设计出最前沿、最高效的应用。 9、移动应用开发工具 Codename One Codename One是一个针对移动应用开发者的、开源的、跨平台的Java工具,旨在帮助Java开发者通过单一代码库来针对所有移动(智能手机和平板电脑)平台构建本地应用。 8、手机 Web 应用开发平台 PhoneGap PhoneGap 是一款HTML5平台,通过它,开发商可以使用HTML、CSS及JavaScript来开发本地移动应用程序。因此,目前开发商可以只 编写一次应用程序,然后在7个主要的移动平台和应用程序商店(app store)里进行发布,这些移动平台和应用程序商店包括:iOS、Android、BlackBerry、webOS、bada、Winodws Phone以及Symbian。 7、开源手机应用开发平台 Appcelerator Appcelerator 是一个构建基于SOA的RIA应用的全集成平台,用来构建富应用、交互式的网站和应用程序。它是开源的。 6、手机上的 HTML5 框架 Sencha Touch ...
编辑部的故事 发布于 1个月前 阅读 2975 评论 11 点赞 2

移动端IM中大规模群消息的推送如何保证效率、实时性?

众所周之,群聊是移动端IM的服务端技术难点所在,难在哪?具体有哪些优先策略?本文或许可以带给你一些启发。
JackJiang- 发布于 5天前 阅读 25

放弃java转战kotlin,我的心路历程

没有伞的孩子,只能努力奔跑。
HzhiBo 发布于 4周前 阅读 190 评论 1

Java基础第(1)天

一、基础知识: 1.JVM、JRE和JDK区别什么? (1)JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性。java语言跨平台,jvm不是跨平台的。 (2)JRE(Java Runtime Environment):java的运行环境,包括jvm+java的核心类库。 (3)JDK(Java Development Kit):java的开发工具,包括jre+开发工具。 2.环境变量path和classpath的作用是什么? (1)path是配置WIndows可执行文件的搜索路径,即扩展名为.exe的程序文件所在的目录,用于指定DOS窗口命令的路径。 (2)classpath是配置class文件所在的目录,用于指定类的搜索路径,JVM就是通过他来寻找该类的class类文件的。 3.变量有什么作用?为什么要定义变量?什么时候用? (1)用来存储数据;(2)(3)用来不断的存放同一类型的常量,并可以重复使用。 4.&和&&的区别是什么? (1)&&会出现短路,如果可以通过第一个表达式判断出整个表达式的结果,则不继续后面表达式的运算;只能操作boolean类型数据; (2)&不会短路,将整个表达式都运算。既可以操作boolean数据还可以操作数。 5.标识符命名规则是什么? (1)有数字(1~9),大小写英文字母,以及_和$组成; (2)不能数字开头; (3)不能使用关...
wtyicy 发布于 3天前 阅读 19 评论 1

入坑 Kotlin 开发前,这些项目能让你少走弯路

自 Google 在 I / O 2017 上宣布 Kotlin 成为 Android 官方支持开发语言后,Kotlin 开始出现在各个语言榜单之上,而且由于 JetBrains 和 Google 的企业支持基础,正迅速得到应用,许多知名技术公司正在积极地将 Kotlin 用于 Android 应用开发。 Kotlin “上位”已将近 100 天,不过目前相关的技术教程仍不算多。如果你正在考虑入坑 Kotlin ,不妨先看看下面这些使用 Kotlin 开发的开源项目,或许前人的经验能让你少走许多弯路。 1、Bandhook-Kotlin 这是一个完全用 Kotlin 语言编写的 Android 音乐应用,是 Play Store 中的 Bandhook 的 Kotlin 版本。目前支持连接到 LastFm 并检索一些音乐乐队,以及显示歌手详情。该项目旨在展示如何使用 Kotlin 完整的编写复杂(至少在架构中)项目。 2、Tachiyomi 一个主要使用 Kotlin 语言编写的  Android 开源漫画阅读器,目前仅发布了测试版本。支持在线、离线阅读,支持 MyAnimeList ,支持章节过滤和从上次阅读点恢复,支持图书管理,阅读器可配置。 3、Twidere-Android 一个 Material Design 风格,功能丰富的 Kotlin 版 Twitter 应用,适用于 Android 4.0+ 。内置夜间模式,支持多账号,支持上传照片和视频,并带有强大...
编辑部的故事 发布于 3个月前 阅读 3644 评论 5 点赞 6

iOS11新特性:新增拖拽交互体验

在Mac软件开发时,拖拽交互是一种十分常用的交互方式,在iOS以前的系统中要实现拖拽交互往往比较困难。iOS11新引入了拖拽相关的API可以帮助开发者快速的构建拖拽交互,在iOS11中,使用这种API进行APP的开发为设计提供了一种全新维度的用户交互方式。
珲少 发布于 1个月前 阅读 309

Objective-C:如何从面向过程支持与实现面向对象

Objective-C:如何从面向过程支持与实现面向对象
treebug 发布于 4天前 阅读 15

Java基础总结第(2)天

8.Java语言的三种技术结构 J2EE:企业版 是为开发企业环境下的应用程序提供的一套解决方案。该技术体系中包含的技术如Servlet、Jsp等,主要针对web应用程序开发。 J2SE:标准版 是为开发普通桌面和商务应用程序提供的解决方案。该技术体系是其他两个的基础,可以完成一些桌面应用程序的开发。(Java版的扫雷) J2ME:小型版 是为开发电子消费产品和嵌入式设备提供的解决方案。该技术体系主要应用于小型电子消费类产品,如手机中的应用程序等。 9.Java的跨平台性 通过Java语言编写的应用程序在不同的系统平台上都可以运行。 跨平台的原因: 只要在需要运行java应用程序的操作系统上,先安装一个java虚拟机即可;由JVM来负责Java程序在该系统中的运行。 10.有符号数据的表示法 原码、反码(原码取反)、补码(反码+1)。 11.函数 定义:函数就是定义在类中的具有特定功能的一段独立小小程序。 特点: (1)定义函数可以将功能代码进行封装;(2)便于该功能进行复用;(3)函数只有被调用才会被执行;(4)函数的出现提高了代码的复用性; (5)对于函数没有具体返回值的情况,返回值类型用的关键字void表示,那么return语句如果在最后一行就可以省略不写。 函数应用的两个明确: (1)明确...
wtyicy 发布于 2天前 阅读 17 评论 1

图片压缩处理的一个可行解决方法【OC】

图片处理 图片压缩
w_sen 发布于 2个月前 阅读 460 点赞 1

高德地图-搜索-路径规划

1、打开高德开放平台 2、创建应用 SHA1: F5:31:C2:B7:9F:A4:05:DF:5F:B2:F1:70:9B:03:B9:BB:50:CF:58:CB 3、添加新key:dd9dde5da25a5811031cb1beb5acb7a5     sha1值获取:找到系统默认的debug.keystore(C:\Users\Administrator\.android\debug.keystore)                 在cmd窗口或android studio 中的Terminal中执行命令:keytool -v -list -keystore keystore地址 4、添加jar和so库(不要添加v4包)     so库添加方式:         第一种:使用默认配置,不需要修改build.gradle。在 main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将下载文件的 armeabi 文件夹复制到这个目录下,如果已经有这个目录,将下载的 so 库复制到这个目录即可。         第二种:使用自定义配置,将下载文件的 armeabi 文件夹复制到 libs 目录,如果有这个目录,请将下载的 so 库复制到这个目录,然后打开build.gradle,找到 buildTypes标签复制:         sourceSets{             main{                 jniLibs.srcDirs = ['libs']             }         } 5、配置     1、配置AndroidManifest.xml   ...
王先森oO 发布于 1个月前 阅读 82

iOS第三方平台集成组件化续集(以插件化的方式添加自定义的第三方平台)

iOS平台以组件化和插件化的方式集成第三方平台
aron1992 发布于 2周前 阅读 105

iOS大型项目之模块化管理

iOS大型项目之模块化管理
风了个1 发布于 4天前 阅读 14

这样的UX设计师简历,HR分分钟给你来电话

BLS调查显示,软件开发和IT,用户体验设计,产品经理和项目管理这三个职位在未来有非凡的发展前景。其中,用户体验设计师是目前最有需求的创意产业工作之一。10年里就业增长率高达22.1%,工作岗位数3,426,000,态势喜人。用户体验设计师薪资也是非常可观,CNN发布了关于用户体验设计师的薪资调查和预测:中等水平薪资为$ 95,000,最高可达$ 150,000。 了解更多UX设计师薪资分布:UI/UX设计师,你的薪资跟上了吗? 面对如此可观的前景和资金,你是否心动了呢?想要成为一名UX设计师吗?如果你决定投身UX设计行业,如何得到聘用?你需要掌握什么技能?这些都是需要仔细考虑的因素。 如果你已经是一名UX设计师了,那可以跳过这个部分,但如果您是新手,查看成为用户体验设计师,这些知识你了解吗以快速获得关于用户体验设计师的基本知识。   那么,现在我假设你已经做好了充分准备,想要去应聘心仪的UX公司,这时,你又需要准备什么呢?通常,成功应聘一个UX岗位包括5个步骤: 1)准备你的简历 2)发送你的简历 3)电话面试 4)现场面试 5)得到工作 本文中,我将讨论前两个步骤: 何如准备和发送UX设计师简历。 首先,你知道简历的真正用途吗? 如果你是想仅靠一份简历就得...
jongde 发布于 5天前 阅读 9

自定义View系列-----圆扩散

前言:        最近跟我的一个同事在讨论关于---有没有必要重复造轮子? 就我感受而言不重复造轮子让更多的时间去研究更广阔的领域。但前提是你有一定基础,什么基础呢?知道这个轮子它的实现原理是什么?让你独自去实现同样的效果你有把握吗?如果你有把握,那么恭喜你,你完全可以去复制别人的轮子,把时间花费在你未知的领域。当然像比较庞大的第三方,不建议太深入以免脱不了坑,适当就行。 圆扩散:         项目中涉及到一个圆形不断的扩散效果,找了下网上也有类似的效果,但是呢,像扩散速度、间距、屏幕适配等等不是很完善,同时借鉴了代码,自己根据需求完善了这个自定义view。就当做练练手,以后关于这类的题材也会继续更新。            实现步骤:     1.画圆,根据圆的直径不断改变实现扩散     2.添加圆时机, 采用数组遍历画多个圆     3.处理数组中数据。   自定义属性: <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="WaveView"> <attr name="wavecolor" format="color"/> <!--view颜色--> <attr name="fillstyle" format="boolean"/><!--Paint的填充风格--> ...
HzhiBo 发布于 2个月前 阅读 690

控制器加载的玄机

# loadView 1. 作用:加载控制器的view 2. 何时调用:当控制器的view第一次使用的时候就会调用 3. 使用场景:只要想自定义控制器的view就调用此方法 访问控制器的View就相当于调用控制器中的view get方法 ``` -(UIView *)view{ if(_view == nil){ [self loadView]; [self viewDidload]; } return _view; } ``` # 控制器加载view的流程 ![2017-7-16-01.png](http://upload-images.jianshu.io/upload_images/2287777-b6128646373dfffb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) * 控制器的init方法底层会调用initWithNibName方法 MyViewController *vc = [[MyViewController alloc] init]; 注意点: * 系统做判断的前提提条件:没有指定nibName;没有自定义loadView方法;控制器以...Controller命名 * 判断原则: * 1、判断下有没有指定nibName,如果指定了就去加载nib * 2、判断有没有跟控制器同名的xib,但是xib的名称不带Controller的xib,如果有就去加载 * 3、如果第二步没有指定,就判断有没有跟控制器类名同名的xib,如果有就去加载 * 4、如果没有任何xib描述控制器的view,就不加载xib ## MyViewController加载view的处理 * 判断有没有指定xibName,如...
杭城小刘 发布于 1周前 阅读 34

APP研发流程图

# APP研发流程图 ![APP研发流程图](https://static.oschina.net/uploads/img/201711/25001231_nXiq.png "APP研发流程图")
treebug 发布于 4小时前 阅读 4

react native类库(三)

1.ui库 https://github.com/rilyu/teaset/blob/master/docs/cn/README.md   //Github
Chason-洪 发布于 6小时前 阅读 1

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

Webservice

1:Webservice 服务端创建定义(axis) /**  * 定义webservice服务(可以是接口和实现类)  * 服务端发布: 参数1:服务的发布地址                   参数2:服务的实现者         Endpoint.publish("http://192.168.1.104:90/hello",  new HelloWebservice());  * @author admin  *  1:用命令生成客户端程序:wsimport  -s . http://192.168.1.105:86/hello?wsdl  *  2:用eclipse生成客户端程序  */ @WebService public class HelloService {          public String getMsg(String msg){         System.out.println("服务端接收到:"+msg);                  return "给客户端返回:"+msg;     }     @WebMethod(exclude=false)     public String sayHello(String msg){         System.out.println("服务端接收请求:"+msg);         return "服务端已经响应:"+msg;     }     public String sayHello1(String msg){         System.out.println("服务端接收请求:"+msg);         return "服务端已经响应:"+msg;     }          public static void main...
m243043962 发布于 10小时前 阅读 3

集群、负载均衡、分布式

http://blog.csdn.net/zhou2s_101216/article/details/51707270     http://itsoul.iteye.com/blog/777212   http://www.360doc.com/content/14/0119/22/15109633_346516210.shtml
m243043962 发布于 10小时前 阅读 2

iOS使用AutoLayout底部TabBar被遮挡问题

1.可以在父视图的ViewController中进行如下设置: OC代码 self.edgesForExtendedLayout = UIRectEdgeNone; Swift代码: this.EdgesForExtendedLayout = UIRectEdge.None;  
小黑202 发布于 11小时前 阅读 1

ios获取设备信息总结

ios获取设备信息总结
北方人在上海 发布于 11小时前 阅读 4

iOS开发必备HUD(透明指示层)

1.MBProgressHUD GitHub地址:https://github.com/jdg/MBProgressHUD 基本上看到的主流iOS应用都集成了这个,Star 7k了,最近看到很多应用HUD隐藏时,有一个动画过程,我还以为是自己扩展的,后来研究才发现,有这个属性animationType: @property (assign) MBProgressHUDAnimation animationType; typedef NS_ENUM(NSInteger, MBProgressHUDAnimation) { /** Opacity animation */ MBProgressHUDAnimationFade, /** Opacity + scale animation */ MBProgressHUDAnimationZoom, MBProgressHUDAnimationZoomOut = MBProgressHUDAnimationZoom, MBProgressHUDAnimationZoomIn }; Loading效果 还可以显示1行或2行文字 圆形进度圆 条形进度条 通过自定义图片形成的效果 可以只要文字提醒 2. SVProgressHUD GitHub地址:https://github.com/TransitApp/SVProgressHUD SVProgressHUD和MBProgressHUD效果差不多,特点就是不需要使用协议,同时也不需要声明实例。直接通过类方法就可以调用: [SVProgressHUD method] [SVProgressHUD dismiss] 效果图.gif 3. JGProgressHUD GitHub地址:https://github.com/JonasGessner/JGProgressHUD JGProgressHUD和MBPro...
_____1____ 发布于 12小时前 阅读 2

android实现异步的方法

在android中,耗时的操作不能用ui线程来做,这会导致app卡顿,甚至出现卡死的现象。耗时的操作需要在子线程中完成。多线程从来都是头痛的事情,涉及到数据同步等,处理不好分分钟死给你看。所以需要一个逻辑清楚,结构简单,但运行可靠的模型。 AsyncTask是符合要求的模型,但在使用中发现它比较烦琐。如果有多个异步操作的话,还需要为每个操作定制化AsyncTask。反复开启AsyncTask也显得费力。 个人偏好的处理方式是使用HandlerThread。其中会用到的android的概念有:Handler,HandlerThread和Message。思路是,用HandlerThread开启一个异步线程,异步线程和ui线程之间用Message来通信,相应的操作在各自线程的Handler中来完成。以下是示例代码: package hello.android; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity implements View.OnClickListener { private static final int UI_MSG0 = 0; private static final int THREAD_MSG0 = 0; ...
kyle960 发布于 12小时前 阅读 4

互联网巨头纷纷布局社交 移动社交未来空间巨大

随着科技的发展,智能移动终端与移动互联网已经全面普及,这也为移动社交的全面发展打下良好的基础。近年来,和移动社交相关的新产品和应用不断推陈出新,创业者都正在挖掘移动社交新的商机,寻找社交的下一个出口。
ThinkSNS账号 发布于 12小时前 阅读 5

mac Finder 与iterm2 跳转

## Finder 跳转 iterm2 插件 1. 使用添加服务 peterldowns/iterm2-finder-tools 根据github上面的描述照着安装一下,然后在系统偏好设置里面 先下载 ``` $ git clone https://github.com/peterldowns/iterm2-finder-tools.git 然后双击安装 ``` Double click Open iTerm.workflow and click "Install" 2. 将Open iTerm.app 拖入Finder You can move the built Open iTerm.app anywhere you'd like, or leave it here; add it to your Finder toolbar by dragging it in while holding the command and option keys. ## iterm2 跳转Finder 在当前目录输入 ``` open . ```
guozenhua 发布于 12小时前 阅读 2

【 开源公告 】 Android 轻应用开发组件 RapidView 正式开源

RapidView 是一套用于开发 Android 客户端界面、逻辑以及功能的开发组件。布局文件(XML)及逻辑文件 ( Lua )可以运行时执行,主要用以解决 Android 客户端界面、逻辑快速更新以及快速开发的诉求。
腾讯云社区 发布于 12小时前 阅读 4

10.新浪微博Swift项目第十天

这是微博项目的最后一天,我们处理一下联系一下FMDB,优化表情键盘以及其他细节
樱黯雨 发布于 13小时前 阅读 3

直播APP开发如何得到用户青睐?

直播APP开发如何得到用户青睐?现如今直播APP开发越难越难,想要寻求新的突破点也是无处寻觅,然而美丽播的到来,带来了更多新颖有趣的功能。
suanleba 发布于 13小时前 阅读 4

iOS GCD的常见功能的封装

iOS GCD的常见功能的封装
风了个1 发布于 13小时前 阅读 4

垃圾回收的一行代码

有没有神在?
虞姬-lu 发布于 13小时前 阅读 4

从AFNetworking源码分析到应用全解

从AFNetworking源码分析到应用全解 一、引言     AFNetworking是iOS/OS开发中常用的一个第三方网络库,可以说它是目前最流行的网络库,但其代码结构其实并不复杂,也可以说非常简洁优美。在AFNetworking中,大量使用的线程安全的开发技巧,读此源码也是一次很好的多线程学习机会。本篇博客从主要结构和网络请求的主流程进行分享,解析了AFNetworking的设计思路与工作原理,后面还有其中提供的UI扩展包的接口应用总结。     每次读优秀的代码都是一次深刻的学习,每一次模仿,都是创造的开始! 二、核心源码分析     平时我们在使用AFNetworking框架时,大多只使用其中的请求管理功能。其实,这个有名的框架中还提供了许多其他的工具,除了可以方便的进行网络安全验证,请求数据与回执数据的序列化,网络状态茶台等基础应用外,还提供了UIKit工具包,其中提供有常用组件的扩展,图片下载器和缓存器等。     对于AFNetworking框架的核心,无非AFURLSesstionManager类,这个类是基于系统的NSURLSesstion回话类进行的管理者包装,下图是AF框架一个整体的结构。 把握这个结构,我们再来学习AF框架将变得十分容易上手,打开AFURLSesstionManager类,你会发现它有1200多行...
珲少 发布于 14小时前 阅读 2

大数据时代已经来临,正在改变我们的生活

随着现代信息技术的不断发展,世界已跨入了互联网+大数据时代。很多人都知道大数据,也想要学习大数据,但是却不知道学习出来能做什么。接下来就让佳华鄂尔多斯大数据中心带着大家看看大数据在当下有怎样杰出的表现吧。  大数据可以帮助政府实现市场经济调控、公共卫生安全防范、灾难预警、社会舆论监督;帮助城市预防犯罪,分析空气污染成因及来源,实现智慧交通,提升紧急应急能力;帮助医疗机构建立患者的疾病风险跟踪机制;帮助医药企业提升药品的临床使用效果;帮助快递公司监测分析运输车辆的故障险情以提前预警维修;帮助电力公司有效识别预警即将发生故障的设备;帮助旅游网站为旅游者提供心仪的旅游路线;帮助二手市场的买卖双方找到最合适的交易目标,帮助用户找到最合适的商品购买时期、商家和最优惠的价格;帮助企业提升营销的针对性,提高办公效率,降低物流和库存的成本,减少投资的风险,以及帮助企业提升广告投放精准度;帮助娱乐行业预测歌手,歌曲,电影,电视剧的受欢迎程度,并为投资者分析评估拍一部电影需要投入多少钱才最合适;帮助社交网站提供更准确的好友推荐,为用户提供更精准的企业招聘信息,向用户推荐可能喜欢的游戏以及适合购买的商品......
虞姬-lu 发布于 14小时前

jquery ajax 向spring MVC controller中传值并接受及解析返回值

主要是涉及实体类中有实体类的数组和集合
右大西 发布于 14小时前 阅读 3

iOS AFNetworking框架HTTPS请求配置

iOS在Apple公司的强制要求下,数据传输必须按照ATS(App Transefer Security)条款。关于AFNetworking框架传输HTTPS数据。
云上飞飞 发布于 14小时前 阅读 2

UX最佳演练:交互驱动连接

以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具   我们开展了最佳用户体验演练的系列活动,其涵盖了模式和格式塔理论是如何帮助我们设计便于用户理解的界面。如今,我们要涉及如何处理这些模式背后的行为:俗称交互设计。 首先我们要明白的是:良好的互动是由良好的人际关系驱动的,那我们要如何实现这一切呢? 以下将从几个方面来帮助我们理解什么是好的交互: 可用性 可用性绝对是我们最喜欢的项目之一。总的来说,它应该作为用户体验设计师的核心,但与我们谈论的交互也没有什么不同。尼尔森和施耐德曼将从以下五个方面来解释什么是可用性: 易学性:我们的用户如何轻松学会使用界面? 高效性:用户能多快完成一项任务? 容错率:我们的用户会有多少失误?他们多快能进行修正? 重现性:用户在使用一段时间后,回到界面时还能重现多少? 满意度:用户是否喜欢使用我们的产品? 我们需要牢记的四个维度: 词汇:模仿是交互的重要组成部分,但不是最重要的。保持原创将有助于建立我们刚刚谈到的特殊的人际网络! 视觉效果:图像和实物应该作为界面的补充,使用的时候要留意,不要让用户感到压迫感。适度最关键。 空间:交互是在手机...
jongde 发布于 14小时前 阅读 1

Android计步模块优化(今日步数)

最近在项目中研究计步模块,主要功能记录当天步数,类似微信运动,支付宝计步,咕咚今日步数。 [本篇文章简书地址](http://www.jianshu.com/p/cfc2a200e46d)
jiahongfei 发布于 1个月前 阅读 1056 评论 5 点赞 2

快速了解人工智能结晶之语音转换文字

科技解放生产力,人工智能的应用如今是大热,那么今天就来给各位介绍一下IBM在这方面的一个小的尝试,语音转换文字。咱们来看一看相较于传统的转换,结合Watson的IBM是如何做到让识别率飙升的。
IBM Bluemix

React前后端同构防止重复渲染

首先解释React前后端同构、React首屏渲染的概念。然后通过这2个概念解决服务端渲染完成后浏览器端重复渲染的问题。
随风溜达的向日葵 发布于 3个月前 阅读 1743 评论 2 点赞 2

kotlin协程简单封装,助你一臂之力

简述 经过两天的学习历程,看遍了国内的经典博客,也看完了官方的文档。下面推荐大家阅读 好的文章: 开始使用Kotlin协程 官方: kotlinx.coroutines 如果英文够好,推荐看官网的,例子比较全面。 本项目源码地址 计划 学习过后,为了更进一步,特地封装一些常用API,以便其他新手学习使用。接下来将完成下面一个个计划功能 1.  顺序执行 task1,task2 2. 并发执行 task1,task2 3. 等待执行 task2 需等待 task1执行完毕后执行 4. 延迟执行 task1 需要10秒之后执行 5. 心跳执行 异步任务按指定间隔执行 Task  6. 任务执行感知生命周期,可以跟随当前activity的生命周期结束而自动结束,并可以配置是否在重新打开activity时是否要重新执行 7. 任务执行可选主线程还是子线程 8. 任务执行可以选择 需要网络或者不需要网络 9. 任务执行可以选择网络制式4G 或者wifi下执行(5.0以上特性) 10.任务可以选择在充电时执行(5.0以上特性) 11. 任务执行可以随时取消,可以取消所有当前任务 目前框架已经做到前7项计划,后续将逐渐完善。 代码演示 1. 顺序执行代码 代码 效果 顺序执行效果图 2. 并发执行 并且分别延迟1秒,3秒 代码 效果 并发效果图 3. 等待执行 代码 效果 等待效果...
zb1500427248653 发布于 3个月前 阅读 1621 点赞 1

浅谈Hybrid

Android web开发入门篇
Android小闹 发布于 4个月前 阅读 2105 评论 4 点赞 6

Android 桌面加载图标过程分析

### 桌面应用图标流程 #### 前言 本人工作上碰到这么一个需求,开发一款滤镜引擎,将桌面上所有的图标进行统一的滤镜化,这就需要了解一下整个桌面去取图标的过程,了解了整个过程,找到真正拿图标的地方,在真正取图标的地方将图片进行替换,或者滤镜化,之前分析情况,现在整理下,与大家分享。**本文所用的代码,是基于Android 5.1** #### 桌面组件介绍 ![一级页面](https://static.oschina.net/uploads/img/201707/25114347_zV1r.png "一级页面") - 一级菜单 - **WorkSpace**:他是一个ViewGroup,要想在桌面上显示东西,就得往这个ViewGroup里添加自己的View - **BubbleTextView**:他是一个TextView,上方是图标,下方是名称,在桌面上的图标都是由这个类表示 - **FolderIcon**:他也是一个ViewGroup,用来表示桌面上的文件夹图标,里面添加了缩略处理过的bitmap,他的背景图片就是文件夹的形状 - **HotSeat**: 他是个FrameLayout,是桌面下方的固定快捷区,包含了几个常用的图标,中间的AllApp按钮是固定位置,也是一个TextView ![抽屉桌面](https://static.oschina.net/uploads/img/201707/25114317_XbLg.png "抽屉桌面") - 抽屉页面 组件 - **PagedView**:他是一...
蔡小鹏 发布于 4个月前 阅读 1721 评论 8 点赞 4

关于线程,还有这些是你需要知道的!

在日常开发中,线程常常被用作为提升程序效率的重要手段。在CoorChice的这篇文章中,CoorChice介绍了线程的基本运作。
CoorChice 发布于 5个月前 阅读 4225 评论 26 点赞 18

你知道Thread线程是如何运作的吗?

我们在Android开发过程中,几乎都离不开线程。但是你对线程的了解有多少呢?它完美运&#...
CoorChice 发布于 5个月前 阅读 4765 评论 26 点赞 17

使用MediaCodec和RTMP做直播推流

本项目完全开源 项目Github地址:[AndroidInstantVideo](https://github.com/ChillingVan/AndroidInstantVideo) 码云地址:[AndroidInstantVideo](http://git.oschina.net/ChillingVan/AndroidInstantVideo) 目前开源的项目或市面上的Android直播客户端主要是用ffmpeg来实现推流的。本文将介绍使用Android原生的视频编码类MediaCodec实现直播推流。 ### 数据流及大致原理 这里所说的直播,就是将你的客户端产生的视频数据,实时发送到服务器上。服务器上的数据再实时地发送到播放客户端上。 * 以视频数据为例: **获取Camera画面** 首先是摄像头拍摄得到原始画面数据,这里原始画面数据的格式我们不用管,因为我们使用的是MediaCodec,所以我们会使用 camera.setPreviewTexture(surfaceTexture) 来利用Camera获取到的画面。 此处的原理可忽略,大致说明的话,就是Camera会把获得的画面保存为OpenGL的一个纹理,我们使用这个纹理就能使用Camera的画面。 **绘制画面** 在获得画面之后,我们要把这个画面(纹理)“画”到MediaCodec上。 如何画? MediaCodec提供一张’白纸’,也就是一个Surface,供我们把纹理画到上面。此处的API是 MediaCodec.createInputSurface() 怎么画?...
量子 发布于 5个月前 阅读 2549 评论 25 点赞 5

OC对象之旅 weak弱引用实现分析

# Runtime学习 -- `weak`应用源码学习 >   Runtime源码分析,带你了解OC实现过程。其中参考了大量的大神的代码以及文献,里面也有个人的见解,欢迎拍砖,欢迎交流。 ## 两种常见使用场景 ```Objective-C /// weak属性 @interface XX : XX @property(nonatomic,weak) Type* weakPtr; @end /// 代码块中使用 { /// 使用__weak __weak Type* weakPtr = [[SomeObject alloc] init]; } ``` 根据调试信息,发现两者的区别是: - 第一种进入到 `id objc_storeWeak(id *location, id newObj)方法` ``` /** * This function stores a new value into a __weak variable. It would * be used anywhere a __weak variable is the target of an assignment. * * @param location The address of the weak pointer itself * @param newObj The new object this weak ptr should now point to * * @return \e newObj */ id objc_storeWeak(id *location, id newObj) { return storeWeak (location, (objc_object *)newObj); } ``` - 第二种绕一个远路,先初始化 `id objc_initWeak(id *location, id newObj)` ``` Objective-C /** * Initialize a fresh weak pointer to some object l...
瞎折腾 发布于 6个月前 阅读 797

用两张图告诉你,为什么你的App会卡顿?

![Cover](http://upload-images.jianshu.io/upload_images/1869462-e45f4cf10981b323.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 有什么料? 从这篇文章中你能获得这些料: - 知道setContentView()之后发生了什么? - 知道Android究竟是如何在屏幕上显示我们期望的画面的? - 对Android的视图架构有整体把握。 - 学会从根源处分析画面卡顿的原因。 - 掌握如何编写一个流畅的App的技巧。 - 从源码中学习Android的细想。 - 收获两张自制图,帮助你理解Android的视图架构。 ![link](http://upload-images.jianshu.io/upload_images/1869462-59ab533d5276864e.JPG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 从setContentView()说起 ``` public class AnalyzeViewFrameworkActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_analyze_view_framwork); } } ``` 上面这段代码想必Androider们大都已经不能再熟悉的更多了。但是你知道这样写了之后发生什么了吗?这个布局到底被添加到哪了?我的天,知识点来了! 可能很多同学也知...
CoorChice 发布于 6个月前 阅读 6650 评论 44 点赞 26 打赏 1

Android 的滑动分析以及各种实现

一、滑动效果的产生     滑动一个View,本质区别就是移动一个View。改变当前View所在的坐标,原理和动画相似不断改变坐标位置实现。实现View的滑动就必须监听滑动的事件,并且根据事件传入的坐标,动态且不断改变View的坐标,从而实现View跟随用户触摸的滑动而滑动。 (1)、Android的坐标系         Android中将屏幕最左上角的顶点作为Android坐标系的原点,从这个点向右是X轴正方向,从这个点向下是Y轴正方向,如下图:          系统提供了getLocationOnScreen(int location[])这样的方法来获取Android坐标系中点的位置,即该视图左上角在Android坐标系中的坐标。在触控事件中使用getRawX()、getRawY()方法所获得的坐标同样是Android坐标系中的坐标。  (2)、视图坐标系     Android中除了上面所说的这种坐标系之外,还有一个视图坐标系,它描述了子视图在父视图中的位置关系。这两种坐标系并不矛盾也不复杂,他们的作用是相互相成的。与Android坐标系类似,视图坐标系同样是以原点向右为X轴正方向,以原点向下为Y轴正方向,只不过在视图坐标系中,原点不再是Android坐标系中的屏幕最左上角,而是以父视图左上角为坐标原点,如下图:     在触控...
MrXI 发布于 7个月前 阅读 1730 评论 7 点赞 3

Android基础夯实--你了解Handler有多少?

万丈高楼平地起,学习任何东西我们都离不开扎实的基础知识。本编文章通过对Handler相关知识的全面回顾,给Android开发者重新夯实基础。
Ryane 发布于 8个月前 阅读 2015 评论 8 点赞 2

Service Worker:让网页无网络也能访问

想要开发一个 PWA(Progressive Web App)应用,你必须知道首先知道,Service Worker 是什么,他是怎么工作的。
kymjs张涛 发布于 9个月前 阅读 2830 评论 7 点赞 2

UICollectionView详解

标准的UICollectionView包含三个部分,它们都是UIView的子类: Cells 用于展示内容的主体,对于不同的cell可以指定不同尺寸和不同的内容,这个稍后再说 Supplementary Views 追加视图 如果你对UITableView比较熟悉的话,可以理解为每个Section的Header或者Footer,用来标记每个section的view Decoration Views 装饰视图 这是每个section的背景 UICollectionViewDataSource(与数据相关) section的数量 -numberOfSectionsInCollection: 某个section里有多少个item -collectionView: numberOfItemsInSection: 对于某个位置应该显示什么样的cell -collectionView: cellForItemAtIndexPath: Supplementary View的方法(section头部视图,section尾部视图) collectionView: viewForSupplementaryElementOfKind: atIndexPath: UICollectionViewDelegate(与数据无关) 关于用户交互,UICollectionView也做了改进。每个cell现在有独立的高亮事件和选中事件的delegate,用户点击cell的时候,现在会按照以下流程向delegate进行询问: -collectionView:shouldHighlightItemAtIndexPath: 是否应该高亮? -collectionView:didHighlightItemAtIndexPath: 如果1返回结果为是,那么高亮 -c...
业界小白 发布于 9个月前 阅读 1177 评论 1 点赞 1

iOS中ImageIO框架详解与应用分析

ImageIO框架提供了读取与写入图片数据的基本方法,通过它可以实现对图片数据的深入分析与内容修改。
珲少 发布于 9个月前 阅读 1791 评论 4

小程序如约而至,微信小程序玩法大起底!!

博卡君的小程序使用教程
博卡君 发布于 11个月前 阅读 7212 评论 10 点赞 5

Lua与ObjC的交互

在这里,我想跟大家分享另外一种脚本语言的交互方式,就是使用Lua与原生的ObjC语言进行交互。
vimfung 发布于 11个月前 阅读 2088 评论 7

手把手教你, Jenkins构建iOS项目

Jenkins构建iOS项目 自动拉取GitHub/SVN 上传到fir/蒲公英
她吃西红柿 发布于 12个月前 阅读 3054 评论 7 点赞 6

自己动手实现Android App插件化

Android插件化目前国内已经有很多开源的工程了,不过如果不实际开发一遍,很难掌握的很好。 下面是自己从0开始,结合目前开源的项目和博客,动手开发插件化方案。 按照需要插件化主要解决下面的几种问题: 1. 代码的加载 (1) 要解决纯Java代码的加载 (2) Android组件加载,如Activity、Service、Broadcast Receiver、ContentProvider,因为它们是有生命周期的,所以要特殊处理 (3) Android JNI代码的加载 (4) Android 特殊控件的处理,如Notification等 2. 资源加载 不同插件的资源如何管理,是公用一套还是插件独立管理? 因为在Android中访问资源,都是通过R. 实现的,   下面就一步步解决上面的问题 1. 纯Java代码的加载 主要就是通过ClassLoader、更改DexElements将插件的路径添加到原来的数组中。 详细的分析可以参考我转载的一篇文章,因为感觉原贴命名和结构有点乱,所以转载记录下。 https://my.oschina.net/android520/blog/794715 Android提供DexClassLoader和PathClassLoader,都继承BaseDexClassLoader,只是构造方法的参数不一样,即optdex的路径不一样,源码如下 // DexClassLoader.java public class DexClassLoader extends BaseDexClassLoader { pu...
xingjm8511 发布于 12个月前 阅读 3193 评论 2 点赞 7

使用原生JS封装Tap事件,解决移动端300ms延迟

为了防止误操作,移动端iOS操作系统针对原生click事件做了300ms的延迟,这在一定程度上影响了我们的使用体验。 GitHub项目地址:https://github.com/SimonZhangITer/MyTapEvent FastClick 现在有现成的插件fastclick可以解决这个问题,但是也有弊端: GitHub上最新版本的插件大小为25.4kb,轻量为趋势,能省则省。 它的核心思想是取消默认的click时间,判断当前dom节点的类型进行相应的操作,这个判断过程较为繁琐。 MyTapEvent 本人最近在做微信项目,由于fastclick插件存在一定弊端,因此开发了一个简单的tap事件,主要思想有以下几点: Thinking 一次tap事件包含touchstart和touchmove(轻微移动)以及touchend三种状态 callback方法在touchend后执行 根据chrome浏览器默认的判断取消点击的移动量,手指偏移量(水平或垂直)超过15px则判定为滚动,取消执行tap事件 手指按下时间过长不视为点击,默认时间间隔为500ms 使用HTMLElement来扩充原型,方便添加Event 使用单例模式,确保只加载一次 ok,思想定下来,代码写起来就清晰多了: if (!HTMLElement.prototype.addTapEvent) { HTMLElement.prototype.addTapEvent = function(callback) { var tapStartTime ...
Simon_ITer 发布于 1年前 阅读 2916 评论 6 点赞 2
顶部