• 2015-08-21

    CSS 样式规则的匹配算法实现

    Views: 14032 | No Comments

    CSS 的完整英文名称是: Cascading Style Sheets, 级联样式表. 除了可以定义丰富的样式, 以及进行界面控件布局外, CSS 最重要的特性便是名字中的"级联(Cascading)"一词. 级联代表了父子关联, 天生便是和数据结构中的"树"相关的.

    我创建的 CocoaUI iOS UI 框架, 是一个使用 CSS 进行 iOS 上流式布局的开发框架, 极大地方便了 iOS 应用的界面开发, 轻松适配多种屏幕. 因为 CocoaUI 使用 CSS 来进行界面布局和定义界面样式, 所以需要对 CSS 的样式规则进行匹配, 将某一条 CSS 样式作用到某一个 UIView(IView) 上面.

    Continue reading »

    Posted by ideawu at 2015-08-21 15:49:14 Tags: , , ,
  • 2015-08-05

    CocoaUI Viewer 开源了

    Views: 10844 | No Comments

    CocoaUI Viewer 是一个界面调试器, 专门用来调试 CocoaUI 的 XML 界面, 使用这个工具, 你可以进行所谓的所见即所得式的 UI 开发. 现在开源之后, 你可以在不同的模拟器里运行这个调试器, 以便调试界面在 iPhone 4/5/6/6p 上面的适配.

    关于使用 CocoaUI 框架进行 iOS app 开发的流程, 我推荐是这样:

    1. 在自己的 Mac 上搭建一个 nginx web 服务器, 以便能通过 HTTP 访问到 XML 界面文件.
    2. 在模块器里启动 CocoaUI Viewer, 填入要调试的 XML 文件的 URL.
    3. 调试完毕后, 把 XML 文件添加进你的 Xcode 项目.
    4. 然后就可以在代码里通过 [View namedView@"a.xml"] 来显示界面了.

    CocoaUI Viewer 的项目在 CocoaUI 项目里.

    下载地址: https://github.com/ideawu/cocoaui
    官方网站: http://www.cocoaui.com/

    Posted by ideawu at 2015-08-05 16:31:09 Tags: ,
  • 2015-08-01

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

    Views: 9730 | 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: 9416 | 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: 11548 | 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: 5582 | 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
|<<<12345>>>| 3/5 Pages, 27 Results.