OC里在UIView上实现带弹跳动画按钮

/*这时用到 pop框架 自定义按钮 BSVerticalButton*/

// 加载了一个 用xib描述的这个UIView

+ (instancetype)publishView{

return [[NSBundle mainBundle]loadNibNamed:NSStringFromClass([self class]) owner:nil options:nil].lastObject;

}

// 定义一个全局 window_

static UIWindow *window_;

+ (void)show{

//这里用自定义的 window 是为了隔绝点击事件 不让点击事件传到后面控制器的view上去

window_ = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

// 这时也可以设置 window的半透明 不用背景图片

//    window_.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.85];

// 这里publishView 是加载了一个 用xib描述的这个UIView

BSPublishView *publishView = [BSPublishView publishView];

publishView.frame = window_.bounds;

window_.hidden = NO; //显示开启window

[window_ addSubview:publishView];

}

- (instancetype)initWithFrame:(CGRect)frame{

self = [super initWithFrame:frame];

if (self) {

[self setupUI];

}

return self;

}

- (void)awakeFromNib{

[super awakeFromNib];

[self setupUI];

}

- (void)setupUI{

//这里用自定义的 window 是为了隔绝点击事件 不让点击事件传到后面控制器的view上去

// view本身不能点

self.userInteractionEnabled = NO;

NSArray *buttonImages = @[@"publish-video",@"publish-picture",@"publish-text",@"publish-audio",@"publish-review",@"publish-offline"];

NSArray *buttonTitles = @[@"发视频",@"发图片",@"发段子",@"发声音",@"审贴子",@"离线下载"];

CGFloat button_w = 72;

CGFloat button_h = button_w + 30;

NSInteger maxLoc = 3; //最多列数

//按钮弹跳动画停止后的起始 y 值

CGFloat buttonEnd_y = ([[UIScreen mainScreen] bounds].size.height - button_h * 2) / 2;

//最开始在屏幕外上方的的起始 y 值

CGFloat buttonBegin_y = buttonEnd_y - [[UIScreen mainScreen] bounds].size.height;

//按钮的起始间隙值

CGFloat buttonStartMargin = 20;

//中间的一个按钮相对于两边按钮的间隙

CGFloat buttonMargin = ([[UIScreen mainScreen] bounds].size.width - buttonStartMargin * 2 - button_w * maxLoc) / (maxLoc - 1);

for (NSInteger i = 0; i < buttonImages.count; ++i) {

// BSVerticalButton 自定义的垂直排布按钮

BSVerticalButton *button = [[BSVerticalButton alloc]init];

button.tag = i;

[self addSubview:button];

[button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];

[button setImage:[UIImage imageNamed:buttonImages[i]] forState:UIControlStateNormal];

[button setTitle:buttonTitles[i] forState:UIControlStateNormal];

[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

button.titleLabel.font = [UIFont systemFontOfSize:14];

NSInteger loc = i % maxLoc;   //例号

NSInteger row = i / maxLoc;   //行号

CGFloat button_x = buttonStartMargin + loc * (button_w + buttonMargin);

CGFloat buttonBginAnimation_y = buttonBegin_y + (button_h * row); //弹跳前的 y 值

CGFloat buttonEndAnimation_y = buttonEnd_y + (button_h * row); //弹跳后的 y 值

//创建pop弹簧动画对象

POPSpringAnimation *animation = [POPSpringAnimation animationWithPropertyNamed:kPOPViewFrame];

animation.beginTime = CACurrentMediaTime() + i * 0.1; //动画开始时间

animation.springBounciness = 10; //弹簧增强 0-20

animation.springSpeed = 8; //弹簧速度 0-20

animation.fromValue = [NSValue valueWithCGRect:CGRectMake(button_x, buttonBginAnimation_y, button_w, button_h)];

animation.toValue = [NSValue valueWithCGRect:CGRectMake(button_x, buttonEndAnimation_y, button_w, button_h)];

//中间的按钮添加动画

[button pop_addAnimation:animation forKey:nil];

}

UIImageView *topImageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"app_slogan"]];

topImageView.center = CGPointMake([[UIScreen mainScreen] bounds].size.width * 0.5, [[UIScreen mainScreen] bounds].size.height * 0.2 - [[UIScreen mainScreen] bounds].size.height);

[self addSubview:topImageView];

//    POPBasicAnimation    基本的动画

//    POPSpringAnimation   弹簧动画

//    POPDecayAnimation    减速动画

//    POPCustomAnimation   自定义动画

//创建pop弹簧动画对象

POPSpringAnimation *animation = [POPSpringAnimation animationWithPropertyNamed:kPOPViewCenter];

animation.beginTime = CACurrentMediaTime() + buttonImages.count * 0.001; //动画开始时间

animation.springBounciness = 10; //弹簧增强 0-20

animation.springSpeed = 10; //弹簧速度 0-20

CGFloat center_x = [[UIScreen mainScreen] bounds].size.width * 0.5;

CGFloat endCenter_y = [[UIScreen mainScreen] bounds].size.height * 0.2;

CGFloat beginCenter_y = endCenter_y - [[UIScreen mainScreen] bounds].size.height;

animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(center_x, beginCenter_y)];

animation.toValue = [NSValue valueWithCGPoint:CGPointMake(center_x, endCenter_y)];

animation.completionBlock = ^(POPAnimation *anim, BOOL finished){

NSLog(@"-------这里可以写动画结束后所要执行的代码...");

// view本身开启交互

self.userInteractionEnabled = YES;

};

//给顶部的图片添加动画

[topImageView pop_addAnimation:animation forKey:nil];

}

- (void)buttonClick:(UIButton *)button{

[self cancel];

[self animationWithBlock:^{

switch (button.tag) {

case 0:

NSLog(@"发视频");

break;

case 1:

NSLog(@"发图片");

break;

case 2:

NSLog(@"发段子");

break;

case 3:

NSLog(@"发声音");

break;

case 4:

NSLog(@"审贴子");

break;

case 5:

NSLog(@"离线下载");

break;

default:

break;

}

}];

}

- (void)animationWithBlock:(void (^) ())completionBlock{

//这里用自定义的 window 是为了隔绝点击事件 不让点击事件传到后面控制器的view上去

// view本身不能点

self.userInteractionEnabled = NO;

for (NSInteger i = 1; i < self.subviews.count; ++i) {

UIView *view = self.subviews[i];

//创建pop基本动画对象

POPBasicAnimation *animation = [POPBasicAnimation animationWithPropertyNamed:kPOPViewCenter];

//        POPSpringAnimation *animation = [POPSpringAnimation animationWithPropertyNamed:kPOPViewCenter];

animation.beginTime = CACurrentMediaTime() + (i-1) * 0.1; //动画开始时间

// 如果用这个基类 POPBasicAnimation  动画的执行节奏(一开始很慢, 后面很快)

animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

animation.toValue = [NSValue valueWithCGPoint:CGPointMake(view.z_centerX,  view.z_centerY + [[UIScreen mainScreen] bounds].size.height)];

if (i == self.subviews.count - 1) { //说明是最后一个 view在做动画,就让执行结束的 block

// 动画结束时调用的 block

animation.completionBlock = ^(POPAnimation *anim, BOOL finished){

window_ = nil; //销毁自定义的 window

          //这里等窗口和动画完成后再执行这个block

!completionBlock ? : completionBlock();

};

}

//给顶部的图片添加动画

[view pop_addAnimation:animation forKey:nil];

}

}

// 退出

- (IBAction)cancel {

[self animationWithBlock:nil];

}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

[self animationWithBlock:nil];

}

时间: 2024-10-13 02:09:06

OC里在UIView上实现带弹跳动画按钮的相关文章

想给UIVIew上控件添加一些动画效果

如果你还不知道怎样让一张图片缓缓滑动,渐渐消失,或者是在原地翻滚,不知道怎样让一个窗口弹出的时候有一点抖动的效果不那么僵硬,那正好,今儿在下总结的内容可能刚好能帮你实现你想要的效果(⊙o⊙)哦. 首先说一下什么是动画效果,动画效果有哪些好处吧: 这里所说的动画绝对不是你在电视上看到的,有剧情的那种(当然这句可能是废话),而是为了增加用户的体验感,通过对控件的属性或者layer进行一些处理达到美化界面的效果,主要是让界面看起来更加的生动,不会太枯燥.想象一下,你在用读书软件时候的翻页效果,就能被称

使用OC和swift创建系统自带的刷新界面

使用OC和swift创建系统自带的刷新界面 一:swift刷新界面代码: import UIKit class ViewController: UITableViewController { // 用于显示的数据源    var _dataSource:[String] = []        // 加载更多 状态 风火轮    var _aiv:UIActivityIndicatorView!        override func viewDidLoad() {        super.

iOS开发——OC和swift创建系统自带的刷新界面

使用OC和swift创建系统自带的刷新界面 一:swift刷新界面代码: import UIKit class ViewController: UITableViewController { // 用于显示的数据源    var _dataSource:[String] = []        // 加载更多 状态 风火轮    var _aiv:UIActivityIndicatorView!        override func viewDidLoad() {        super.

atitit. 文件上传带进度条 atiUP 设计 java c# php

atitit. 文件上传带进度条 atiUP 设计 java c# php 1. 设计要求 1 2. 原理and 架构 1 3. ui 2 4. spring mvc 2 5. springMVC.xml 3 6. struts extand url 3 7. behide code 3 8. 简化设计 3 1. 设计要求 带进度条 完成提示动画效果.. 2. 原理and 架构 如果需要显示进度条,实时显示文件上传进度 需要使用Ajaxj技术..up到个在的iframe黑头.. 工作原理 其实际

UIView上的滑动手势及动作

///////////注flowView为UIView////////// //添加滑动手势事件 UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:flowView action:@selector(handleGesture:)]; [flowView addGestureRecognizer:gestureRecognizer]; //添加点击手势事件 flow

atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7

1. 实现原理 1 2. 大的文件上传原理::使用applet 1 3. 新的bp 2 1. 性能提升---分割小文件上传,避免一次使用内存使用过大的 2 2. Uuid还是原来文件名称:: 2 3. 监听器频繁地被调用 2 4. 结合wz easyui 2 4. 选型 2 5. Uploadify::yash js+flash 3 6. commons-fileupload:: 3 7. COS这个工具O'Reilly公司 3 8. 大的文件上传组件总结 3 5. 林吧实现ui Ajax+jq

Android上发送带附件的邮件

准备工作-下载最新版本的JMail https://java.net/projects/javamail/pages/Home#Download_JavaMail_1.5.2_Release http://www.oracle.com/technetwork/java/javase/downloads/index-135046.html 在android上发送邮件方式: 第一种:借助GMail APP客户端,缺点是必须使用GMail帐号,有点是比较方便 不需要写很多代码,但是不是很灵活. 第二种

Ubuntu 11.10 (Oneiric)上编译带utrace补丁的内核 转

Ubuntu 11.10 (Oneiric)上编译带utrace补丁的内核 首先准备linux内核编译环境: sudo apt-get install fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge kernel-package sudo apt-get build-dep linux sudo apt-get install git-core libncurses5 libncurses5-dev lib

页面表单里的图片上传ENCTYPE=&quot;multipart/form-data&quot;

ENCTYPE="multipart/form-data"用于表单里有图片上传. <form action="<%=basePath %>asyUploadTest.action" method="post" enctype="multipart/form-data"> <input type="file" name="mvUploadify" >&l