Monthly Archives: March 2012

处理 iOS 5 中文输入法下 keyboard 的 frame 尺寸变化

在iOS 5 系统中,输入文字时,从英文切换到中文,以及从中文切换回英文,屏幕键盘的尺寸会有所变化,中文输入提示直接显示在键盘顶部,比英文键盘多占据了一些空间。对于需要根据屏幕键盘的尺寸来布局的元素,如何根据输入法切换后的尺寸进行调整呢。答案是通过订阅键盘相关的通知,来获取键盘的位置和尺寸变化。 当键盘显示或隐藏时,iOS系统会发出 6 种通知,包括: UIKeyboardWillShowNotification UIKeyboardDidShowNotification UIKeyboardWillHideNotification UIKeyboardDidHideNotification UIKeyboardWillChangeFrameNotification UIKeyboardDidChangeFrameNotification 当然,关键的一点是,在输入法切换时,系统也会发送 UIKeyboardWillShowNotification 和 UIKeyboardDidShowNotification。所以只要订阅了 UIKeyboardDidShowNotification 这个通知就可以获取屏幕键盘的尺寸和位置了。 在通知中的userInfo中保存了键盘尺寸和位置变化的所有信息。userInfo 字典 的key包括: UIKeyboardFrameBeginUserInfoKey UIKeyboardFrameEndUserInfoKey UIKeyboardAnimationDurationUserInfoKey UIKeyboardAnimationCurveUserInfoKey 通过 UIKeyboardFrameEndUserInfoKey 可以获取到屏幕键盘变化后的尺寸,根据这个尺寸就可以调整屏幕的元素布局了。 示例代码: – (void)registerForKeyboardNotifications { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil]; } – (void)keyboardWasShown:(NSNotification*)aNotification { NSDictionary* info = [aNotification userInfo]; CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; /* 通过 kbSize.height 就可以得到屏幕键盘的高度,这样就可以据以调整其他的屏幕元素了 */ }

iOS Leave a comment

推荐2个Mac OS X上的JSON工具

1 visual JSON 能够将JSON串以列表的方式展示,方便对JSON数据的解析。 2 JSONModeler 可以解析JSON串生成JSON的格式,并且直接生成Obj-c的类实现文件,这个在处理属性非常多的JSON串的时候比较有用。   在 mac appStore 里面直接搜索上面两款软件即可下载,都是免费应用

iOS, iPad, iPhone4, Mac OS X Leave a comment

使用xcrun打包iOS应用

XCode 默认编译出来的是appName.app 包,而iphone,ipad的安装文件是ipa文件。 将.app包打包成ipa最简单的方式是将appName.app 拖放到itunes中,然后在itunes的相关目录中找到appName.ipa,但这样测试的时候没生成一个版本都有重新做一遍。 使用xcrun命令可以帮我们自动完成打包工作,可以方便的测试,并且可以指定签名,生成不同的版本。 当然对于提供给越狱用户的应用也很有意义。 xrun的使用方法如下: /usr/bin/xcrun -sdk iphoneos PackageApplication -v “${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app” -o “${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa” –sign “${DEVELOPER_NAME}” –embed “${PROVISONING_PROFILE}” 当然你可以把上面的命令添加到XCode build Phase中,项目编译完成自动打包。

ArcGIS, ArcGIS API for iOS, iOS, iPad, iPhone4, Mac OS X Leave a comment

使用lipo合并iPhone模拟器和真机的静态类库

在XCode开发中分为2种运行环境,一种是模拟器,一种是设备(devices),在这两种环境中静态库(.a文件)是不能混用的,混用的话会造成程序崩溃。 为了避免这种情况,一种做法是分别编译两种版本的静态库,当使用静态库的应用编译不同版本的时候手工切换静态库的版本,这样做很容易造成混乱,不方便管理。 下面就介绍一下lipo这个命令,lipo命令可以将两种版本的静态库合并成一个通用的动态库. lipo: Usage: lipo [input_file] … [-arch input_file] … [-info] [-detailed_info] [-output output_file] [-create] [-arch_blank ] [-thin ] [-remove ] … [-extract ] … [-extract_family ] … [-verify_arch …] [-replace ] … lipo 命令使用示例: # Set the target folders and the final framework product. INSTALL_DIR=${SYMROOT}/FI.framework DEVICE_DIR=${SYMROOT}/Release-iphoneos SIMULATOR_DIR=${SYMROOT}/Release-iphonesimulator # Create and renews the final […]

AppleScript, ArcGIS API for iOS, iOS, iPad, iPhone4 Leave a comment