iOS_31_cocos2d_Progress进度条

最终效果图:

进度条节点【CCProgressNode】,构造时依赖一个Sprite

【CCProgressNode】添加一个CCActionProgressFromTo动作

也可以在update方法中,更改【CCProgressNode】的percentage属性,实现进度条效果

【CCProgressNode基本属性:

【CCProgressNode】构造方法:

它的类型只有两种:

雷达和条形

进度条场景代码

//
//  ProgressScene.h
//  31_cocos2D入门
//
//  Created by beyond on 14-9-22.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "CCScene.h"
#import "cocos2d.h"
#import "cocos2d-ui.h"
@interface ProgressScene : CCScene

+ (instancetype)scene;
- (id)init;
@end
//
//  ProgressScene.m
//  31_cocos2D入门
//
//  Created by beyond on 14-9-22.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//  演示进度条:雷达或者bar条形

#import "ProgressScene.h"

@interface ProgressScene ()
{
    // 精灵
    CCSprite *_sprite;

    // 相当于一个ProgressView,通过进度的形式,展示一个Sprite,(根据说明可知,其构造方法,需要Sprite)
    CCProgressNode *_progressNode;
}
@end

@implementation ProgressScene

#pragma mark - 生命周期
+ (instancetype)scene
{
	return [[self alloc] init];
}
- (id)init
{

    self = [super init];
    if (!self) return(nil);

    // 1.创建背景颜色为深灰色
    [self setupBgColor];

    // 2.添加一个返回到主场景的按钮,位于右上方
    [self addBackToMainBtnOnRightTop];

    // 3.添加演示按钮,点击后,展示不同的进度效果
    [self addShowBtns];

    // 返回创建好的场景对象
	return self;
}

// 3.添加演示按钮,点击后,展示不同的进度效果
- (void)addShowBtns
{
    // 1.创建一个精灵,并不添加到self
    _sprite = [CCSprite spriteWithImageNamed:@"nanaLogo.jpg"];
    _sprite.name = @"nana";
    // 2.相当于一个ProgressView,通过进度的形式,展示一个Sprite,(根据说明可知,其构造方法,需要Sprite)
    _progressNode = [CCProgressNode progressWithSprite:_sprite];
    // 也要设置位置
    _progressNode.position = ccp(self.contentSize.width*0.5,self.contentSize.height/2);

    // 3.雷达
    [self addBtn:@"【雷达】" position:ccp(0, 0) target:self sel:@selector(radarBtnClick)];
    // 4.bar
    [self addBtn:@"【bar】" position:ccp(0, 0.2) target:self sel:@selector(barBtnClick)];
    // 5.label
    [self addBtn:@"【Label】" position:ccp(0, 0.4) target:self sel:@selector(labelBtnClick)];
}

#pragma mark - 按钮点击
// 1.点击按钮,演示 【雷达进度条】
- (void)radarBtnClick
{
    [_progressNode removeFromParent];

    // 设置类型为:雷达进度条
    _progressNode.type = CCProgressNodeTypeRadial;
    // 范围:0 ~ 100  0表示什么也不显示
    _progressNode.percentage = 0;

    // 雷达的中心点,类似锚点
    _progressNode.midpoint = ccp(0.5,0.5);

    // 2.添加到self
    [self addChild:_progressNode];

    // 3.可以通过执行动作,实现进度条的增加,也可以通过消息调度update方法中
//    CCActionProgressFromTo *action = [CCActionProgressFromTo actionWithDuration:1 from:0 to:100];
//    [_progressNode runAction:action];
}
// 2.点击按钮,演示 【bar进度条】
- (void)barBtnClick
{
    [_progressNode removeFromParent];

    // 设置类型为:bar进度条
    _progressNode.type = CCProgressNodeTypeBar;
    // 范围:0 ~ 100  0表示什么也不显示
    _progressNode.percentage = 0;

    // bar的中心点,类似锚点,设置从左下角开始
    _progressNode.midpoint = ccp(0.0,0.0);

    // barChangeRate,是一个point,仅在bar条件下有效,只让X方向增加,Y方向不增加
    _progressNode.barChangeRate = ccp(1.0,0.0);

    // 注意:当barChangeRate中y为0时,表示Y方向不会增加,因此,midpoint的y可以随便写

    // 2.添加到self
    [self addChild:_progressNode];

    // 3.可以通过执行动作,实现进度条的增加,也可以通过消息调度update方法中
    //    CCActionProgressFromTo *action = [CCActionProgressFromTo actionWithDuration:1 from:0 to:100];
    //    [_progressNode runAction:action];
}
// 2.点击按钮,演示 【Label进度条】
- (void)labelBtnClick
{
    [_progressNode removeFromParent];
    // cocos2d默认字体:Marker Felt
    // 1.先展示一个白色的
    CCLabelTTF *bgWhiteLabel = [CCLabelTTF labelWithString:@"Loading..." fontName:@"Marker Felt" fontSize:60];
    bgWhiteLabel.position = ccp(self.contentSize.width*0.5,self.contentSize.height/2);
    [self addChild:bgWhiteLabel];

    // 2.创建一个红色的,但是一开始不显示,进度为0
    CCLabelTTF *redLabel = [CCLabelTTF labelWithString:@"Loading..." fontName:@"Marker Felt" fontSize:60];
    redLabel.color = [CCColor colorWithCcColor3b:ccc3(255, 0, 0)];

    _progressNode = [CCProgressNode progressWithSprite:redLabel];
    _progressNode.position = bgWhiteLabel.position;

    // 设置类型为:bar进度条
    _progressNode.type = CCProgressNodeTypeBar;
    // 范围:0 ~ 100  0表示什么也不显示
    _progressNode.percentage = 0;

    // bar的中心点,类似锚点,设置从左下角开始
    _progressNode.midpoint = ccp(0.0,0.0);

    // barChangeRate,是一个point,仅在bar条件下有效,只让X方向增加,Y方向不增加
    _progressNode.barChangeRate = ccp(1.0,0.0);

    // 注意:当barChangeRate中y为0时,表示Y方向不会增加,因此,midpoint的y可以随便写

    // 2.添加到self
    [self addChild:_progressNode];

}
#pragma mark - 消息调度
// cocos2d V3中, 只要实现update方法,就会自动调用
// 因此,也可以通过消息调度来实现 进度条的增加
- (void)update:(CCTime)delta
{
    _progressNode.percentage++;
}
#pragma mark - 抽取
// 添加一个按钮
- (void)addBtn:(NSString *)title position:(CGPoint)position target:(id)target sel:(SEL)sel
{
    // 创建一个按钮,点击后进入下一个场景
    CCButton *btn = [CCButton buttonWithTitle:title fontName:@"Verdana-Bold" fontSize:18.0f];
    btn.positionType = CCPositionTypeNormalized;
    // 例如:ccp(0.5f, 0.35f) 是位于屏幕的中间靠下方
    // 注意这里是笛卡尔坐标系,原点在左下方
    btn.position = position;
    btn.anchorPoint = ccp(0, 0);
    // 监听点击事件
    [btn setTarget:target selector:sel];
    [self addChild:btn];
}

#pragma mark - 固定写法
// 固定写法:右上方,创建一个返回按钮,点击后,返回至主场景
- (void)addBackToMainBtnOnRightTop
{
    // 5、右上方,创建一个返回按钮,点击后,返回至主场景
    CCButton *backButton = [CCButton buttonWithTitle:@"[ 回到Main ]" fontName:@"Verdana-Bold" fontSize:18.0f];
    backButton.positionType = CCPositionTypeNormalized;
    // 屏幕的右上方 注意这里是笛卡尔坐标系,原点在左下方
    backButton.position = ccp(0.85f, 0.95f);
    // 监听点击事件
    [backButton setTarget:self selector:@selector(backToMainBtnClicked)];
    [self addChild:backButton];
}

// 固定写法: 回到主场景
- (void)backToMainBtnClicked
{
    // 使用转场动画,切换场景至 主场景,动画:从左向右
    [[CCDirector sharedDirector] replaceScene:[NSClassFromString(@"MainScene") scene]
                               withTransition:[CCTransition transitionPushWithDirection:CCTransitionDirectionRight duration:1.0f]];
}

// 固定定法:创建背景颜色为深灰色
- (void)setupBgColor
{

    CCNodeColor *background = [CCNodeColor nodeWithColor:[CCColor colorWithRed:0.2f green:0.2f blue:0.2f alpha:1.0f]];
    [self addChild:background];
}

@end

时间: 2024-12-30 03:38:20

iOS_31_cocos2d_Progress进度条的相关文章

Android 从无到有打造一个炫酷的进度条效果

从无到有打造一个炫酷的进度条效果

每周进度条(第十五周)

第十五周进度条   第十五周 所花时间 1h 代码量(行)  100 博客量(篇)  1 学到的知识 对图片的处理 在Android程序中加入图片

Bootstrap进度条

Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet Explorer 9 及之前的版本和旧版的 Firefox 不支持该特性, Opera 12 不支持动画. 默认的进度条 创建一个基本的进度条的步骤如下: 添加一个带有 class .progress 的 <div>. 接着,在上面的 <div> 内,添加一个带有 class .progress-bar 的空的 <div>. 添加一个带有百分比表示的宽度的 style 属性,例如 sty

HTML5/CSS3超酷进度条 不同进度多种颜色

下面我们来看看实现这款进度条的过程和源码,代码主要由HTML.CSS以及jQuery组成,实现过程也相对比较简单.HTML代码: <div id="wrapper">     <div class="loader-container">           <div class="meter">0</div>           <span class="runner"&g

基于HT for Web矢量实现HTML5文件上传进度条

在HTML中,在文件上传的过程中,很多情况都是没有任何的提示,这在体验上很不好,用户都不知道到时有没有在上传.上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件上传进度条,矢量在<矢量Chart图表嵌入HTML5网络拓扑图的应用>一文中已经讲述了关于setCompType()方法的应用,今天我们用setImage()方法充分利用系统中定义好的矢量资源来实现文件上传进度条,我们先来看下效果图: 从效果图可以看到,向服务器上传了一个mp4文件,并在最下方显示

Android的下拉刷新带进度条效果

首先看一下运行效果图,程序的下拉刷新参考了视频,在视频页面也提供了源码下载, http://www.imooc.com/learn/135 本篇主要说在此基础上增加了进度条的快速旋转和递增递减处理,在文章最后也会给出源码,这里主要描述一下所用的一个类 RoundProgressBar package com.cayden.listview; import android.content.Context; import android.content.res.TypedArray; import

【WebView】带加载进度条的WebView及Chrome联调

先看效果图: 看到顶部蓝色的进度条了. 原理:用到了 android.webkit.WebChromeClient中的onProgressChanged,而android.webkit.WebViewClient是没有这个方法的.所以普通的WebView是无法实现进度条的. 下面直接上干货: /** * ProgressWebView * * @author lif * * */ @SuppressWarnings("deprecation") public class Progres

OpenCV GUI基本操作,回调函数,进度条,裁剪图像等

代码为转载,出处找不到了,不贴了 工具条进度条: // ConvertColor.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #pragma comment(lib,"opencv_core2410d.l

python 进度条

功能说明:将程序的执行进展情况按照百分比用进度条显示. print:打印末尾会自动加上换行符'\n',如果要让打印的结果一直在同一行显示,不能使用这个命令 sys.stdout.write():打印输出但结尾不带'\n',使输出一直在同一行,同时在末尾加上行首符'\r',将最新的输出结果一直保持在行首 sys.stdout.flush():将缓存在sys.stdout.write()的内容暂时打印出来 #!/usr/bin/env python # -*- coding:utf-8 -*- im