浮生猎趣

ls *.fun

在UINavigationController中使用UITabBarController,处理Two-stage Rotation错误

| Comments

写iOS应用时,经常需要将UITabBarController嵌入到一个根UINavigationController中,如果处理不好,我们会遇到这样的错误:

Two-stage rotation animation is deprecated. This application should use the smoother single-stage animation.

网上找了一下,StackOverFlow的这个答案说,不应该将UITabBarControllier嵌入到UINavigationController中作为rootViewController,但是,我们的确想要这样做,所以只好寻找其它办法。不过,至少我们可以确定的是,问题出在rootViewController同时包含UITabBarController和UINavigationController。

修复iOS中UIScrollView的scrollToTop设置后不生效的问题

| Comments

iOS中的UIScrollView有一个属性scrollToTop,设置为YES之后,点击设备的状态栏(StatusBar)即可将滚动试图的内容滚动到最顶端,在滚动列表很长的时候,这个特性十分有用。

今日在使用这一属性的时候,发现部分情况下,一切正常;但是也有时候,点击状态栏,滚动条没反应!检查了代码,确定已经设置scrollToTop = YES,但是总是会有不起作用的情况。

于是到万能的StackOverflow寻求答案,不失所望,找到了类似的问题:scroll UITableView to top when tapping top of the screen

答案也解释得很清楚了,如下:

通过简单的方法适应iOS7中的UIViewController,同时兼容iOS6

| Comments

设置view从导航栏下方开始布局

在iOS6及以前的版本中,UIViewController的高度和位置都是从导航栏下方开始的。但是在iOS7中,UIViewController不再提供wantsFullScreenLayout属性,UIViewController创建后默认就是Full Screen的,因此如果带导航栏的应用界面中的部分控件会与导航栏重叠在一起。

我们的应用大都要兼容低于iOS7的版本,所以必须解决这种不兼容的现象。 思路是,还是按照iOS6的布局方式,因为被导航栏覆盖部分界面实在看不出有什么好处。所以,我们需要判断iOS版本,如果是iOS6,一切照旧,如果是iOS7,则设置view从导航栏下方开始布局。

简单的方法,在ViewDidLoad里面增加几句代码即可,如下:

iOS中检测UIScrollView滚动动画是否结束

| Comments

在iOS中使用UITableView的时候,有时候需要检测UITableView的滚动动画是否结束,但是很遗憾,iOS没有直接提供这样的API。 先看一下现有的几个方法是怎样的:

1
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;

这个方法表示手指离开了scrollview,第二个参数用于判断滚动速度是否慢慢下降。

1
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;      // called when scroll view grinds to a halt

这个方法看上去挺像我们要找的:停止减速。但是,从注释看,“嘎然而止”的时候才会被调用,很明显,我们要的是“自然停止”时被调的方法。

1
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView; // called when setContentOffset scrollRectVisible:animated: finishes. not called if not animating

这个是指scrollview停止滚动动画,嗯,这下是我们想要的了吧!

抱歉,不是!!! 试验一下就会发现,无论怎么滚动怎么停止,这个方法都不会被调!处分用代码的方式调用了setContentOffset scrollRectVisible:animated: finishes,但是,我们手指触发试图滚动是不会调该方法的……

一堆似是而非的方法绕得头晕啊……

解决方法

Octopress博客发布后的基本配置、继续阅读、自动打开、代码高亮、插入图片、分类标签、修改样式

| Comments

基本配置

修改_config.yml,格式为:配置项: + 空格 + 参数,空格不能少。

标题、副标题、作者、侧边栏等

编辑_config.yml,修改url:titlesub_titleauthor, default_asides的对应参数。

修改日期格式

编辑_config.ymldate_format,格式定义见这里

如想显示为:2013-12-02, Mon,则改为:

date_format: "%F, %a"

继续阅读

如果正文太长,不希望在首页直接显示完整内容,可以在适当的位置加上一句<!--more-->,后面的内容就会被按钮Read on→所替代,点击继续阅读。

免费获得比特币的方法汇总

| Comments

随着比特币价格的不断升高,可以免费获得比特币的网站也越来越少,或者获得的比特币数量少得可怜。不过,天无绝人之路,目前还是有少数网站提供免费的比特币的。

1.注册网站,赠送比特币

  • 比特币中国:注册,完成邮箱验证,可以获得0.0005BTC;完成手机验证,可获得0.0005BTC。0.01BTC可提现。
  • 欢乐95:注册赠送800积分,每天登录有100积分,在通过欢乐95在各大网上商城购买商品,还可以获得大量积分,适合网购达人。13积分=1uBTC。
  • 火币网:注册并且完善个人信息后,可以参与抽奖,中奖数额为0.001-1个比特币。0.01BTC可提现。
  • OKCoin:注册并绑定手机、设定交易密码即可获得0.001BTC。

注意:比特币中国和OKCoin的最新公告显示,由于最近虚假注册用户数太多,暂停送币活动%>_<%。

2.点击广告,获得比特币

只推荐比较靠谱大方的两个:

  • Coinad:注册一个账号,设定自己的比特币地址,在View ads页面可以看到可点击的广告以及点击一个广告可以获得多少比特币。每天的广告数量有限。比特币累积到0.0003后可以提现。
  • BtcClicks:注册一个账号,设定自己的比特币地址,在Surf Ads查看可点击的广告。0.001BTC可提现。

用Octopress在Github搭建博客,并绑定独立域名

| Comments

11月中旬在Godaddy购买了一个域名,一直没派上用场,想到经常在各个个人博客找到各种问题的解决方案,于是决定先成立一个博客,记录并分享一些浮生小记、程序问题、解决方案,顺便在互联网上表示,“来过”。

这是第一篇博文,记录一下使用Octopress搭建博客,发布到Github Pages免费空间,并绑定个人域名的步骤。

概述

什么是Github Pages

Github Pages Github提供的一个免费空间,拥有一个独立的二级域名,允许开发者提交静态网页文件,用于介绍自己,或者自己的开源项目,可以看作是个人或项目主页。每个Pages有300M的存储空间,于是很多人就当作个人博客来发布博文。特点:

  • 轻量级,配置简单
  • 无需自己提供空间
  • 使用标记语言,如Markdown
  • 可以绑定独立域名

什么是Octopress

Octopress主页上的标语“A blogging framework for hackers”就可以看出,这是一个比较Geek的博客系统,提供了一套自动化的工具和模板,帮助用户简便地创建一个博客。

Octopress生成的博客可以很方便地部署到Github Pages上,网上已有很多教程介绍怎么利用Octopress在Github上搭建博客。不过,由于生成的博客都是静态文件,所以也可以部署到任何一个服务器上。随着Wordpress越来越臃肿庞大,相对而言更加方便快捷的Octopress则日渐流行。特点:

  • 以Ruby为运行环境,使用简单的命令生成静态页面
  • 默认使用Markdown语法
  • 可离线编写博文,方便备份、预览
  • 可从Wordpress迁移过来

安装