18
2011

在界面中显示文本内容

iOS有单行和多行显示文本的控件对象:

  • UITextField:简单的单行
  • UITextView:可滚屏的多行

在这里使用的是多行文本,即UITextView。

image

Continue Reading »

17
2011

使用贝塞尔曲线实现关键帧动画

贝塞尔曲线,可以通过三个点,来确定一条平滑的曲线。在计算机图形学应该有讲。是图形开发中的重要工具。

image

实现的是一个图形做圆周运动。不过不是简单的关键帧动画那样,是计算出了很多点,当然还是用的关键帧动画,即使用CAKeyframeAnimation。有了贝塞尔曲线的支持,可以赋值给CAKeyframeAnimation 贝塞尔曲线的Path引用。

Continue Reading »

17
2011

计算一个点是否在一个区域中

iOS有时候需要判断是否touch到某个图的区域中。这里做了个小示例,通过CGPath创建一个区域,区域是由路径做两点间线段并闭合成的区域,比如这里创建了一个简单的矩形。然后就可以用CGPath相关函数判断点是否在区域里了。

- (void)viewDidLoad {
    [super viewDidLoad];
   
    CGMutablePathRef pathRef=CGPathCreateMutable();
    CGPathMoveToPoint(pathRef, NULL, 4, 4);
    CGPathAddLineToPoint(pathRef, NULL, 4, 8);
    CGPathAddLineToPoint(pathRef, NULL, 10, 4);
    CGPathAddLineToPoint(pathRef, NULL, 4, 4);
    CGPathCloseSubpath(pathRef);
   
    CGPoint point=CGPointMake(5,7);
    CGPoint outPoint=CGPointMake(5,10);
   
    if (CGPathContainsPoint(pathRef, NULL, point, NO)) {
        NSLog(@"point in path!");
    }
   
    if (!CGPathContainsPoint(pathRef, NULL, outPoint, NO)) {
        NSLog(@"outPoint out path!");
    }

PDF格式創作    发送文章为PDF   
17
2011

Xcode项目使用SVN需要的设置

参考了:http://iphonedevelopertips.com/xcode/how-to-fix-subversion-in-xcode-3.html

需要在~/.subversion/config文件中设置一下。

找到:

# global-ignores

在下面添加:

global-ignores = build *~.nib *.so *.pbxuser *.mode* *.perspective*

因为build目录是不需要提交的,是构建出来的文件。另外,还有后缀是mode1v3和pbxuser等文件,这是Xcode用户文件。另外一些也是临时文件或者构建出来的文件。

Continue Reading »

17
2011

Xcode中使用SVN需要注意的问题

Xcode的SVN功能,和Eclipse中的subclipse或者windows下的tortoiseSVN比较起来功能还差很多。

我是索性不用的,直接用命令行。我看有的朋友是用subclipse,其实也挺好,不过,为了使用SVN功能要单独开一个耗费资源的Eclipse。

但是,不论使用什么SVN工具,都会遇到Xcode固有的问题,即project.pbxproj文件的提交冲突问题。

project.pbxproj文件里面包含了构建过程所需的所有文件,如果你在项目目录下增加了新文件,比如没有通过Xcode,该文件就不在project.pbxproj文件中,就不会生成到app中。同理,如果你从SVN中更新到其他项目成员增加的文件,而没有更新project.pbxproj文件(或者该成员根本就没有提交这个文件),则也会出现相同的现象。

Continue Reading »

3
2011

Getting started with Graphics and Animation

翻译学习了一下Apple官方的《Getting started with Graphics and Animation》,原文见这里

概述

iOS包括一些框架用于图形和动画:

UIKit包括一个objc的库,用于用户界面和2D绘图,也可以通过UIKit做用户界面动画。
Core Graphics是基于C的API,用于绘制矢量图形、位图和PDF内容。(注意,Quartz 2D是指2D画图引擎的术语,Core Graphics是框架的名称。这两个术语是同义词。
Core Animation是基于objc的API,用于增加用户图形界面的平滑效果和动态的反馈
OpenGL ES是OpenGL的移动版本,用于在移动设备上高性能的2D和3D绘图。苹果的OpenGL ES框架包括EAGL,这是一种基于objc的API,它在Core Animation层和UIKit视图上集成了OpenGL ES的渲染功能。

可使用UIKit实现典型的用户界面图形操作,比如绘制图片,设置颜色,填充矩形。另外,图形的转换(Transaction),比如移动、缩放和反转等,平滑的从一个视图或者屏幕过渡(Transition)到另外一个,以及在一个视图或者层中的动画内容。

当需要更强大的2D绘图能力,需要使用Core Graphics框架。它是绘制矢量图、线、形状、模式、渐变、图形,甚至PDF文档的主力。更高层的框架,比如UIKit,使用Core Graphics。

Core Animation是UIKit框架用于层以及过渡的编程接口。大多数时候,开发者不需要直接使用Core Animation。除非当应用中需要细粒度的动画控制。

当开发游戏或者其他需要依赖GPU的高级图形能力时,需要用到OpenGL ES。

Continue Reading »

31
2011

拖动层并播放动画

在下面的示例中,用手势拖动Layer转动,当手势结束时,会播放动画继续让Layer沿着圆的轨道转动一会儿。

imageimage

Continue Reading »

31
2011

在objc中使用struct

在java中,向方法中传递复杂参数,一般使用对象来传递。因为这样便于扩展。不需要改变方法的声明部分。

在objc中,开始是发送多个参数。这样很麻烦。那么可以用到c里面的方式来做,通过struct传递参数。把相关的参数写在一个struct里面。

声明struct需要在头文件中:

#define MIN_VELOCITY 10
#define LOOP_COUNT 100

@interface AnimationView : UIView <UIGestureRecognizerDelegate>{
    CALayer *startLayer;
    CALayer *startLayer2;
}

struct PanLocationData{
    CGPoint currentLocation;
    CGPoint currentVelocity;
    CGPoint panLocation;
};

Continue Reading »

31
2011

在objc项目中使用常量

objc不像java,有静态常量。比如:

public static final RADIAS=180;

目前我的做法是,使用c的预处理#define。比如,在头文件中:

#define MIN_VELOCITY 10
#define LOOP_COUNT 100

@interface AnimationView : UIView <UIGestureRecognizerDelegate>{

在代码中使用:

if (data.panLocation.x<MIN_X) {
    data.panLocation.x=MIN_X;
}

这些预定义常量,会在编译器编译的时候用define中定义的字符串替代。

PDF下載    发送文章为PDF   
27
2011

多个CALayer的联动

如何通过手势捕获CALayer基础上做了个示例,两个CALayer的联动,当拖动左侧的Layer的时候,右侧的Layer随动。因为右侧的动画没有关闭,有延迟,产生随动的效果。如果不想延迟,可参考拖动动画的问题及解决

imageimage

Continue Reading »

第10页,共88页« 前...6789101112131415...后 »