• 2015-08-01

    iOS 应用修改状态栏和导航栏颜色

    Views: 10705 | No Comments

    修改状态栏

    在 Target::Info 栏里, 找到 Custom iOS Target Properties, 加入一项配置项:

    Key: View controller-based status bar appearance
    Type: Boolean
    Value: NO
    

    这样, 就可以修改状态栏的字体颜色了, 否则没法改. 然后修改 AppDelegate:

    - (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)opts {
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    }
    

    修改导航栏背景和字体颜色

    - (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)opts {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        
        UINavigationController *nav = [[UINavigationController alloc] init];
        nav.navigationBar.tintColor = [UIColor whiteColor];
        nav.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
        nav.navigationBar.barTintColor = [UIColor blueColor];
        nav.navigationBar.translucent = NO;
    
        self.window.rootViewController = nav;
        [self.window makeKeyAndVisible];
    
        return YES;
    }
    
    • tintColor: 导航栏的按钮(如返回)颜色
    • titleTextAttributes: 标题颜色
    • barTintColor: 背景颜色
    • translucent: 是否透明
    Posted by ideawu at 2015-08-01 15:50:17 Tags:
  • 2015-07-14

    iOS与PHP加密解密

    Views: 10407 | No Comments

    之前说过, iOS 的加密解密方法非常不方便, 不易于和 PHP 或者 Java 之间交互, 比较封闭.

    为了和PHP服务器端方便地进行加密解密操作, 我封装了 RSA 类. 使用这个类, 你可以用你喜欢的工具, 如 openssl 命令行, PHP 脚本, 生成友好的公钥或者私租文本, 然后 iOS 使用这些密钥进行加密, PHP 进行解密, 或者 PHP 进行解密, 由 iOS 进行解密.

    方法如下:

    // return base64 encoded string
    + (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;
    // return raw data
    + (NSData *)encryptData:(NSData *)data publicKey:(NSString *)pubKey;
    // TODO:
    //+ (NSString *)encryptString:(NSString *)str privateKey:(NSString *)privKey;
    //+ (NSData *)encryptData:(NSData *)data privateKey:(NSString *)privKey;
    
    // decrypt base64 encoded string, convert result to string(not base64 encoded)
    + (NSString *)decryptString:(NSString *)str publicKey:(NSString *)pubKey;
    + (NSData *)decryptData:(NSData *)data publicKey:(NSString *)pubKey;
    // TODO:
    //+ (NSString *)decryptString:(NSString *)str privateKey:(NSString *)privKey;
    //+ (NSData *)decryptData:(NSData *)data privateKey:(NSString *)privKey;
    

    目前能实现:

    1. iOS 用公钥加密, PHP 用私钥解密
    2. PHP 用私钥加密, iOS 用公钥解密
    3. iOS 用私钥加密, PHP 用公钥解密(未实现)
    4. PHP 用公钥加密, iOS 用私钥解密(未实现)

    后面两种场景的需求还未实现, 但很快会实现. 欢迎你来补充. 项目地址: https://github.com/ideawu/Objective-C-RSA

    Posted by ideawu at 2015-07-14 16:59:51 Tags:
  • 2015-06-19

    iOS 正确接收 HTTP chunked 数据的方法

    Views: 12574 | 1 Comment

    iOS 上的 NSURLConnection 一般能处理绝大部分的 HTTP 请求场景, 不过, 对于一种情况, 它无法处理, 那便是接收 HTTP chunked data. NSURLConnectionDataDelegate 有一个方法, 可以在读取到部分响应时进行回调, 但是, 数据不是按 HTTP chunked data 来接收的, 它会将多个 chunk 合并到一起.

    @protocol NSURLConnectionDataDelegate 
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
    @end
    

    没办法, 只能使用 cURL for iOS, 在 iComet 的 iOS 例子里有介绍.

    首先, 下载 cURL for iOS: http://seiryu.home.comcast.net/~seiryu/libcurl-ios.html

    然后, 把里面的 libcurl.a 引入你的项目, 还要把它的头文件引入. 注意, cURL 依赖 libz.dylib.

    Continue reading »

    Posted by ideawu at 2015-06-19 19:54:21
  • 2015-04-08

    Objective C urlencode urldecode

    Views: 5973 | No Comments
    NSString *urlencode(NSString *str){
    	CFStringEncoding cfEncoding = kCFStringEncodingUTF8;
    	str = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(
    		NULL,
    		(CFStringRef)str,
    		NULL,
    		CFSTR("!*'();:@&=+$,/?%#[]"),
    		cfEncoding
    		);
    	return str;
    }
    
    NSString *urldecode(NSString *str){
    	CFStringEncoding cfEncoding = kCFStringEncodingUTF8;
    	str = (__bridge NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding (
    		NULL,
    		(CFStringRef)str,
    		CFSTR(""),
    		cfEncoding
    		);
    	return str;
    }
    
    Posted by ideawu at 2015-04-08 13:14:49
  • 2015-02-08

    OS X 屏幕录制视频转 GIF 动画

    Views: 8254 | No Comments

    本篇文章告诉你如何在 Mac OS X 上用免费的工具来将屏幕录制视频转成 GIF 动画, 这些免费的工具是: QuickTime, ffmpeg, and gifsicle.

    ffmpeg -i in.mov -s 600x400 -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=3 > out.gif
    

    参数说明:

    • -r 10 告诉 ffmpeg 将视频的帧率转成 10fps, 这样可以减小视频体积
    • -s 600x400 这是你的视频的尺寸, 600x400(注意, 去掉这个参数可以保持原来的画质)
    • --delay=10 告诉 gifsicle GIF 每帧之间的时间间隔是 100ms(也就是帧率为 10fps, 1000ms/10fps = 100ms = 10x10ms), gifsicle 使用的单位是 10ms, 不是 ms
    • --optimize=3 让 gifsicle 优化一下, 设置为 3 即可

    相关软件安装:

    • QuickTime, 系统自带
    • ffmpeg, gifsicle, 开源的免费命令行软件, 安装:
      brew install ffmpeg 
      brew install gifsicle
      

    更多信息请参考: https://gist.github.com/ideawu/5b385c9ff4d160efc9d4

    用 QuickTime Player 在 Mac 下录制屏幕

    Posted by ideawu at 2015-02-08 13:29:48
  • 2014-10-15

    Mac 下创建隐藏用户

    Views: 7497 | No Comments

    Mac 下创建隐藏用户, 例如 nobody, nginx, mysql 用户等等, 这些是 Apache, Nginx, Mysql, PHP-fpm 等软件要用到的. 但是, 这些用户又不想它能登录系统.

    sudo dscl . create /Groups/nginx PrimaryGroupID 390
    sudo dscl . create /Users/nginx UniqueID 390
    sudo dscl . create /Users/nginx PrimaryGroupID 390
    sudo dscl . create /Users/nginx UserShell /bin/false
    sudo dscl . create /Users/nginx RealName nginx
    sudo dscl . create /Users/nginx NFSHomeDirectory /dev/null
    sudo dscl . create /Groups/nginx GroupMembership nginx
    
    Posted by ideawu at 2014-10-15 14:49:28
|<<<1234567>>>| 5/7 Pages, 37 Results.