实现iphone漂亮的动画效果主要有两种方法,一种是UIView层面的,一种是使用CATransition进行更低层次的控制,
第一种是UIView,UIView方式可能在低层也是使用CATransition进行了封装,它只能用于一些简单的、常用的效果展现,这里写一个常用的示例代码,供大家参考。
[UIView beginAnimations:@"Curl"context:nil];//动画开始
[UIView setAnimationDuration:0.75];
[UIView setAnimationDelegate:self];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:myview cache:YES];
[myview removeFromSuperview];
[UIView commitAnimations];
第二种方式相对复杂一些,但如果更好的进行控制,还是使用这种方法吧,基本使用方法可以看一下如下例子:
CATransition *animation = [CATransition animation];
[animation setDuration:1.25f];
[animation setTimingFunction:[CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseIn]];
[animation setType:kCATransitionReveal];
[animation setSubtype: kCATransitionFromBottom];
[self.view.layer addAnimation:animation forKey:@"Reveal"];
这里使用了setType与setSubtype组合,这使用个比较保险,因为他的参数就是官方API里定义的,他们的参数说明可以参考如下:
setType:可以返回四种类型:
kCATransitionFade淡出
kCATransitionMoveIn覆盖原图
kCATransitionPush推出
kCATransitionReveal底部显出来
setSubtype:也可以有四种类型:
kCATransitionFromRight;
kCATransitionFromLeft(默认值)
kCATransitionFromTop;
kCATransitionFromBottom
还有一种设置动画类型的方法,不用setSubtype,只用setType
[animation setType:@"suckEffect"];
这里的suckEffect就是效果名称,可以用的效果主要有:
pageCurl 向上翻一页
pageUnCurl 向下翻一页
rippleEffect 滴水效果
suckEffect 收缩效果,如一块布被抽走
cube 立方体效果
oglFlip 上下翻转效果
最后再给出一种常用代码供大家参考。
// Curl the image up or down
CATransition *animation = [CATransition animation];
[animation setDuration:0.35];
[animation setTimingFunction:UIViewAnimationCurveEaseInOut];
if (!curled){
//animation.type = @"mapCurl";
animation.type = @"pageCurl";
animation.fillMode = kCAFillModeForwards;
animation.endProgress = 0.99;
} else {
//animation.type = @"mapUnCurl";
animation.type = @"pageUnCurl";
animation.fillMode = kCAFillModeBackwards;
实例:
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card id="HTML" title="HTML Tutorial"> <p> Our HTML Tutorial. </p> </card> <card id="XML" title="XML Tutorial"> <p> Our XML Tutorial. </p> </card> </wml>
该程度基本结构可以分为以下几个关键部分:
XML声明总是在文件的第一行,注意前面最好不要有空格:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1xml">
比如<wml xml:lang="zh">表示文档语言为中文。
进行包含和定义。 <card>同时可以包含多个可选的属性,如<card id="name" title="label" newcontext="false"
ordered="true" onenterforwand="url" pmemterbackward="url" ontimer="url">。
标签不可交叉使用
文档内容位于 <wml>...</wml> 标签内。
文档中的每个 card 位于 <card>...</card> 标签内
实际的段落在 <p>...</p> 标签中。
每个 card 元素都有一个 id 以及一个 title。
WML字符使用基本规则
WML是一种比较严格的语言,字符使用必须遵守相应的规则,这些基本规则主要包括以下几个方面:
一般来说,WML的所有标签,属性,规定和枚举及它们的可接受值必须小写,Card的名字和变量可大写和小写,但它是区分大小写的。包括参数
的名字和参数的数值都是大小写敏感的,例如variable1、Variable1和vaRiable1都是不同的参数。
行标签必须写成<br/>才正确。
程序执行时,WML将忽视所有的多于一个以上的不显示字符,即WML会把一个或多个连续的换行、回车、水平制表符及空格转换成一个空个。
注意:指定汉字字符集的形式和方法可能因为开发工具或WAP手机的不同而不同。
用户的输入 input元素
input元素是WML编程中处理用户交互活动的重要元素,它通过单独的<input/>标签进行定义,其语法格式如下:
<input name="variable" title="label" type="type" value="value" default="default" format="specifier" emptyok="false|true" size="n" maxlength="n" tabindex="n"/>
其中除了name属性是必选的以外,其他属性都是可选的。
这些属性的功能和用法介绍如下:
如果选择password,则指定用户输入的文本作为密码文本处理,而浏览器上响应用户输入显示时逐渐均为星号* ,由此起到保密的目的。
(type中只有这两种类型且password并不常用,手机回显多数直接以明文显示)
实例:
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card title="Input"> <p> Name: <input name="Name" size="15"/><br/> Age: <input name="Age" size="15" format="*N"/><br/> Sex: <input name="Sex" size="15"/> </p> </card> </wml>
select元素
select元素是通过<select>和</select>标签进行定义的,语法格式如下:
<select title="label" multiple="false|true" name="variable" default="default" iname="index_var" ivalue="default" tabindex="n">
内容(content)
</select>
其中所有属性都是可选的。select元素各个属性的功能和用法介绍如下:
用于定义select元素中的一组单选项。它通过<option>和</option>标签进行定义,并可包括事件和单选项的显示文本等信息,其语法格式如下:
<option title="label" value="value" onpick="href">
内容(content)
</option>
option元素的属性均为可选,各属性功能及用法说明如下:
用于将多个相关的option元素进行分组,用户浏览器可以借助这种分组来安排选项列表的显示布局,以方便用户选择。optgroup元素是通过<optgroup>和</optgroup>标签进行定义的,其语法格式如下:
<optgroup title="label">
内容(content)
</optgroup>
它所包含的内容中需要包含至少一次option元素或其他的optgroup元素。
optgroup元素只有一个属性,即title属性,用于定义optgroup元素的标题,以便提示用户操作。
用于设定输入框和相应的说明文本,从而用户就可以利用input元素等借助该输入框输入所需的数据信息。fieldset元素的语法格式如下:
<fieldset title="label">
内容(content)
</fieldset>
由于fieldset元素和输入有关,所以它们的内容中可以包含与输入有关的其他元素。 其语法格式可以看出,fieldset元素只有一个属性,即title属性,用于定义fieldset元素的标题,以便提示用户操作。
实例:
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card title="Selectable List"> <p> <select> <option value="htm">HTML Tutorial</option> <option value="xml">XML Tutorial</option> <option value="wap">WAP Tutorial</option> </select> </p> </card> </wml>
用户的提交
可利用go元素和postfield元素进行数据提交。
go元素<go> 任务表示跳转到新卡片的动作。在 href 属性中规定跳转的目的地
属性:
<postfield> 标签包含了连同 <go> 标签被送往服务器的信息。注:是用户提交数据的关键点。
属性:
实例:
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card> <p> <select name="name"> <option value="htm">HTML Tutorial</option> <option value="xml">XML Tutorial</option> <option value="wap">WAP Tutorial</option> </select> </p> <p> Click OK to Send <do type="accept"> <go href="/blog_article/test.wml" method="post"> <postfield name="i" value="2"/> <postfield name="j" value="30"/> <postfield name="n" value="$(name)"/> <!-- 注:这里的n为服务器中要取的变量名,name为select元素名,$(name)用户的选项值。 --> </go> </do> </p> </card> </wml>