动画伸缩显示视图的简单示例
来源:互联网 发布:中兴java面试题 编辑:程序博客网 时间:2024/05/21 14:05
动画伸缩显示视图的简单示例
业务需要这样一种效果,iPad上要能在Detail视图中动画效果显示提示信息。效果类似这样(见蓝色部分视图及旁边的按钮):
点击按钮后,蓝色视图及包含的子视图收缩直至消失:
动画的原理是:
- 蓝色视图及子视图,在点击按钮后宽度设置为0
- 使用动画效果(UIViewAnimationCurveEaseInOut),并延时一段时间
写了个类来封装这个动画效果,只需传入参数:蓝色视图和按钮对象引用即可。
封装类的interface部分:
#import <Foundation/Foundation.h>
@interface AnimationHelper : NSObject {
NSMutableArray *subviews;
int viewX;
int viewWidth;
}-(AnimationHelper *)init: (UIView *)parentView;
-(void)doOnClick:(UIView *) v:(UIButton *) b;
@end
实现类部分:
#import "AnimationHelper.h"
@implementation AnimationHelper
-(AnimationHelper *)init: (UIView *)parentView{
subviews=[[NSMutableArray alloc] initWithCapacity:0];
for (UIView *v in parentView.subviews) {
[subviews addObject:[NSNumber numberWithInt:[v frame].size.width]];
}
viewX=[parentView frame].origin.x;
viewWidth=[parentView frame].size.width;
return self;
}-(void)doOnClick:(UIView *) v: (UIButton *) b{
CGContextRef context = UIGraphicsGetCurrentContext();
[UIView beginAnimations:@"Curl" context:context];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.5];
CGRect rect = [v frame];
CGRect rect1=[b frame];
BOOL flag=rect.size.width>0;
if (flag) {
rect1.origin.x=(viewX+viewWidth)- rect.size.width;
rect.size.width=0;
v.alpha=0.0f;
}else {
rect.size.width=viewWidth;
rect1.origin.x=(viewX+viewWidth);
v.alpha=1.0f;
}
if (flag) {
for (UIView * mv in v.subviews) {
NSLog(@"<—subviews.");
CGRect r=[mv frame];
r.size.width=0;
mv.alpha=0.0f;
[mv setFrame:r];
}
}else {
for (int i=0;i<[v.subviews count];i++) {
NSLog(@"–>subviews.");
UIView *mv=[v.subviews objectAtIndex:i];
CGRect r=[mv frame];
r.size.width=[[subviews objectAtIndex:i] intValue];
mv.alpha=1.0f;
[mv setFrame:r];
}
}
[b setFrame:rect1];
[v setFrame:rect];
[UIView commitAnimations];
}@end
在DetailViewController中的调用该类,需要在加载视图后实例化AnimationHelper:
- (void)viewDidLoad {
helper=[[AnimationHelper alloc] init:changeView];
[super viewDidLoad];
}
然后,就是点击按钮的方法部分:
-(IBAction)onClickButton:(id)sender{
[helper doOnClick:changeView :button];
}
DetailViewController interface用到的部分的代码片段:
UIButton *button;
UIView *changeView;
UILabel *myLabel;
AnimationHelper *helper;
}
- 动画伸缩显示视图的简单示例
- JavaScript伸缩的菜单简单示例
- NSViewAnimation视图的简单动画
- Android属性动画简单实现图片的伸缩
- Android属性动画简单实现图片的伸缩
- 给头视图添加个伸缩动画
- expandlistview 加伸缩的动画
- 简单的动画定义的视图
- Android 动画的简单使用——视图动画
- Android实用视图动画及工具系列之一:简单的载入视图和载入动画
- 带动画效果的简单Tips显示
- 编写android简单的手势切换视图示例
- 简单通过Storyboard的Segue做视图切换动画
- Android视图切换动画库SwitchLayout的简单使用
- Android视图切换动画库SwitchLayout的简单使用
- Android简单而强大的骨骼动画视图
- Jquery 示例二 简单动画
- ios--UIView动画简单示例
- C++ 类模板特化
- 移动Web开发的13个重要工具(中)
- log4j
- 移动Web开发的13个重要工具(下)
- API调用太麻烦 eBay推出Web查询语言
- 动画伸缩显示视图的简单示例
- Android4.0.1 模拟器内核 最新下载地址及编译步骤
- ios view与view间切换的动画效果
- HTML5到底是什么?
- 基于jQuery实现的当离开页面时出现提示的实现代码
- 源代码行数统计工具 Any Code Counter
- Android 视频播放器截屏功能实现讲解
- ios 视图切换动画效果
- Java 直接选择排序算法