在一些ios应用中经常会需要自定义视图,其中气泡视图就是其中之一,下面介绍两种方式:   方式一: 1:新建一UIView的子类UIBubbleView 2:在initwithframe中初始化 a):要绘制气泡的坐标targetpoint(x,y); b):气泡的frame bubbleFrame; c):调用方法setneedslayout; 3:调用drawCGRect方法 只要代码如下: [sourcecode lang=”plain”] – (void)drawRect:(CGRect)rect{ NSLog(@"bubble draw"); CGContextRef c = UIGraphicsGetCurrentContext(); CGContextSetRGBStrokeColor(c, 0.0, 0.0, 0.0, 0.0); CGContextSetLineWidth(c, 3.0); //确定画线的宽度,对象组合,颜色 CGMutablePathRef bubblePath = CGPathCreateMutable(); //绘制起点-箭头右边-气泡右上顶点-右下顶点-左下顶点-左上顶点-箭头左边-起点闭合 CGPathMoveToPoint(bubblePath, NULL, targetPoint.x, targetPoint.y); CGPathAddLineToPoint(bubblePath, NULL, targetPoint.x+pointerSize-1, targetPoint.y-2); CGPathAddArcToPoint(bubblePath, NULL, bubbleFrame.origin.x,…

获取localization   语言 [sourcecode lang=”plain”]NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *languages = [defaults objectForKey:@"AppleLanguages"]; NSLog(@"%@, %@",languages,NSLocalizedString(@"xxx")); [/sourcecode] Resources—右键—new file —(String files or empty file)命名为: Localizable.strings –右键 get info — make file localizable 添加对应语言的localization   1:Localizable.strings:(针对字符串  NSLocalizedString) 在对应的zh-hans和English文件添加: “xxx”=”本地字符串”; “yyy”=”本地字符串”;   2:InfoPlist.strings:(针对app名称) 在对应的zh-hans和English文件添加: CFBundleName=”本地名”; CFBundleDisplayName=”本地名”;  …

在 iOS中可以直接调用 某个对象的实例方法 方式有2: 1:[obj performSelector:withObject:]; 2:使用NSInvocation 第一种方式比较简单,能完成简单的调用。但是对于>2个的参数或者有返回值的处理,那就需要做些额外工作才能搞定。那么在这种情况下,我们就可以使用NSInvocation来进行这些相对复杂的操作

要在一个tabbar+navbar的页面切换到navbar页面, 尝试了多种方式: 1:self.tabBarController.tabBar.hidden=yes, 只是不显示tabbar但是对应的区域不可用 2:在push之前修改下一个页面的frame,  把tabbar移到屏幕下边, [sourcecode language=”objc”] for (UIView *v in self.tabBarController.view.subviews) { if ([v isKindOfClass:[UITabBar class]]) { if (hidden) { [v setFrame:CGRectMake(v.frame.origin.x, 480, v.frame.size.width, v.frame.size.height)]; }else { [v setFrame:CGRectMake(v.frame.origin.x, 480-49, v.frame.size.width, v.frame.size.height)]; } }else { if (hidden) { [v setFrame:CGRectMake(v.frame.origin.x, v.frame.origin.y, v.frame.size.width, 480)];…

对openGL早有耳闻,但是刚接触android下的opengl,做个demo学习下, 先把opengl的框架搭建起来:只要有如下几个文件, openActivity.java —-作为启动入口,android通过GLSurfaceView显示openGL试图,而GLSurfaceView提供了专门渲染3D的Renderer接口 GLRender.java —-渲染图形 GLImage.java —-获取资源文件 GLRender.java 实现Renderer接口:只要实现如下方法: public void onDrawFrame(GL10 gl); //进行图形的绘制 public void onSurfaceChanged(GL10 gl, int width, int height); public void onSurfaceCreated(GL10 gl, EGLConfig config); GLRender.java 代码如下: package com.aurora.android.render; import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.util.Random; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import com.aurora.android.model.GLImage;…

IOS内存管理 简介 iOS下内存管理的基本思想就是引用计数,通过对象的引用计数来对内存对象的生命周期进行控制。具体到编程时间方面,主要有两种方式: 1:MRR(manual retain-release),人工引用计数,对象的生成、销毁、引用计数的变化都是由开发人员来完成。 2:ARC(Automatic Reference Counting),自动引用计数,只负责对象的生成,其他过程开发人员不再需要关心其销毁,使用方式类似于垃圾回收,但其实质还是引用计数。 面临的问题 根据苹果说明文档,面临的两个主要问题是: 释放或覆盖的数据仍然在使用。这将造成内存损坏,通常在应用程序崩溃,或者更糟,损坏用户数据。 不释放不再使用的数据会导致内存泄漏。分配的内存,内存泄漏不会释放,即使它从来没有再次使用。泄漏会导致应用程序的内存使用量日益增加,这反过来又可能会导致系统性能较差或死机。 内存管理规则 我们创建自己的对象,当他们不再需要的时候,释放他们。 保留需要使用的对象。如果没有必要必须释放这些对象。 不要释放我们没有拥有的对象。 使用内存管理工具 可以用Xcode工具仪器的帮助下分析内存的使用情况。它包括的工具有活动监视器,分配,泄漏,僵尸等 分析内存分配的步骤 1. 打开一个现有的应用程序。 2. 选择产品,配置文件如下所示 3.在以下界面中选择 Allocations 和 Profile。 4. 我们可以看到不同对象的内存使用情况 5. 你可以切换视图控制器查看内存是否释放。 6.同样我们可以使用 Activity Monitor 来查看内存在应用程序中的分配的情况。 7. 这些工具可以帮助我们了解内存的使用情况及在什么地方可能发生泄漏。

IOS应用程序调试 简介 当我们做应用程序的时候,可能会犯各种错误,这可能会导致各种不同的错误。因此,为了修复这些错误或缺陷,我们需要来调试应用程序。 选择一个调试器 Xcode中调试器即 GDB 和 LLDB 调试器,GDB 是默认的。 LLDB是一个调试器是LLVM开源的编译器项目的一部分。您可以更改调试,编辑活动计划选项。 如何查找编码错误? 我们只需要建立我们的应用程序,代码被编译器编译,所有的消息,错误和警告将显示以及错误的原因,我们可以纠正他们。可以点击 product,然后点击”分析”,将在应用程序中可能发生的问题。 设置断点 断点帮助我们了解我们的应用程序对象,帮助我们找出许多缺陷,包括逻辑问题的不同状态。我们只需要点击创建一个断点的行号。我们可以通过点击并拖动它删除断点。如下所示 当我们运行应用程序并选择playVideo,按钮的应用程序将被暂停,我们来分析一下我们的应用程序的状态。当断点被触发时,我们将得到一个输出,如下图所示 可以轻松地确定哪个线程触发断点。在底部可以看到对象,如self,sender等,这些持有相应的对象的值,我们可以展开一些这些对象,看看他们每个的状态是什么。 要继续应用程序,我们在调试区选择继续按钮(最左边的按钮),如下图所示。其他选项包括步骤和单步跳过 异常断点 我们也有异常断点,触发应用程序停止发生异常的位置。通过选择调试导航后选择”+”按钮,我们可以创建异常断点。将得到下面的窗口 然后,我们需要选择” Exception Breakpoint (添加异常)”断点,它会显示下面的窗口 下一步是什么? 你可以在 Xcode 4 用户指南 知道更多关于调试和其他Xcode功能的知识。

IOS 故事板(Storyboards) 简介 Storyboards在 iOS 5 中才有介绍,当我们用Storyboards时,部署目标应该是iOS5.0或更高版本。 Storyboards 帮助我们了解视觉流动的画面,在界面为 MainStoryboard.storyboard下创建所有应用程序屏幕。 实例步骤 1. 创建一个single view application,创建应用程序时选择 storyboard 复选框。 2. 选择MainStoryboard.storyboard,在这里你可以找到单一视图控制器。添加一个视图控制器,更新视图控制器,如下所示 3.连接两个视图控制器。右键单击”show modal(显示模式)”按钮,在左侧视图控制器将其拖动到右视视图控制器中,如下图所示: 4.现在从如下所示的三个显示选项中选择modal(模态) 5.更新 ViewController.h 如下所示 #import <UIKit/UIKit.h> @interface ViewController : UIViewController -(IBAction)done:(UIStoryboardSegue *)seque; @end 6.更新 ViewController.m 如下所示 #import “ViewController.h” @interface ViewController () @end @implementation ViewController…

IOS自动布局 简介 自动布局在iOS 6.0中引入,仅可以支持IOS6.0 及 更高版本。它可以帮助我们创建用于多个种设备的界面。 实例步骤 1.创建一个简单的 View based application 2.修改 ViewController.m 的文件内容,如下所示 #import “ViewController.h” @interface ViewController () @property (nonatomic, strong) UIButton *leftButton; @property (nonatomic, strong) UIButton *rightButton; @property (nonatomic, strong) UITextField *textfield; @end @implementation ViewController – (void)viewDidLoad{ [super viewDidLoad]; UIView *superview = self.view;…

IOS-Twitter和Facebook 简介 Twitter已经整合到iOS5.0,而Facebook已经被集成在 iOS 6.0中。本教程的重点讲解如何利用苹果提供的类在iOS5.0和iOS6.0中部署Twitter和Facebook。 实例步骤 1. 创建一个简单View based application 2. 选择项目文件,然后选择”targets(目标)”,然后在 choose frameworks(选择框架)中添加Social.framework 和 Accounts.framework 3. 添加两个名为facebookPost 和 twitterPost的按钮,并为他们创建 ibActions。 4. 更新 ViewController.h 如下 #import <Social/Social.h> #import <Accounts/Accounts.h> #import <UIKit/UIKit.h> @interface ViewController : UIViewController -(IBAction)twitterPost:(id)sender; -(IBAction)facebookPost:(id)sender; @end 5. 更新ViewController.m ,如下所示 #import “ViewController.h” @interface ViewController…