李华明Himi 原创,转载务必在明显处注明:
转载自 【黑米GameDev街区】 原文链接:  http://www.himigame.com/iphone-cocos2d/492.html

-------------【11月28日更新解决添加组件Cocos2d动画停止播放的BUG】--------

【iOS-Cocos2d游戏开发之七】在cocos2d中添加/删除系统组件,并解决View设置透明会影响View中的其他组件的问题【11月28日更新解决添加组件Cocos2d动画停止播放的BUG】!

首先申明下:希望大家转载的时候不要忘记给原文连接,看到不少论坛转载完全变成他们论坛自己原创了~ 请大家配合哈~谢谢~娃哈哈;

本篇Himi为童鞋们介绍两个常用的知识点:一个是在Cocos2d中添加UILocalNotification本地化通知,另外一个就是添加UIScrollViewiOS系统组件实现滚动字幕效果;

对于UILocalNotification这个本地化通知功能实现比较简单,用途很广,最大的用途就是阶段性的让用户回归我们的应用中;那么下面就直接上代码:

因为是添加到cocos2d引擎中,另一方面一般我们需要用户进入我们应用后就开启通知功能的;所以我们将代码放在 AppDelegate.m 类中的applicationDidFinishLaunching中,代码如下:

- (void) applicationDidFinishLaunching:(UIApplication*)application
{...application.applicationIconBadgeNumber = 0;//应用程序右上角的数字=0(消失)[[UIApplication sharedApplication] cancelAllLocalNotifications];//取消所有的通知//------通知;UILocalNotification *notification=[[UILocalNotification alloc] init]; if (notification!=nil) {//判断系统是否支持本地通知notification.fireDate=[NSDate dateWithTimeIntervalSinceNow:kCFCalendarUnitDay];//本次开启立即执行的周期notification.repeatInterval=kCFCalendarUnitDay;//循环通知的周期notification.timeZone=[NSTimeZone defaultTimeZone];notification.alertBody=@"哇,我的女神,你怎了?";//弹出的提示信息notification.applicationIconBadgeNumber=1; //应用程序的右上角小数字notification.soundName= UILocalNotificationDefaultSoundName;//本地化通知的声音notification.alertAction = NSLocalizedString(@"营救女神!", nil);  //弹出的提示框按钮[[UIApplication sharedApplication]   scheduleLocalNotification:notification];} ...
}

这里Himi首先是将之前的所有通知都取消掉,防止开启多个循环本地化通知,并且让应用右上角的数字设置为0,这里设置为0就相当与取消数字的显示了;

然后需要说明的是循环通知的周期,iOS提供如下一些周期:

enum {kCFCalendarUnitEra = (1UL << 1),kCFCalendarUnitYear = (1UL << 2),kCFCalendarUnitMonth = (1UL << 3),kCFCalendarUnitDay = (1UL << 4),kCFCalendarUnitHour = (1UL << 5),kCFCalendarUnitMinute = (1UL << 6),kCFCalendarUnitSecond = (1UL << 7),kCFCalendarUnitWeek = (1UL << 8) /* CF_DEPRECATED(10_4, 10_7, 2_0, 5_0) */,kCFCalendarUnitWeekday = (1UL << 9),kCFCalendarUnitWeekdayOrdinal = (1UL << 10),
#if MAC_OS_X_VERSION_10_6 <= MAC_OS_X_VERSION_MAX_ALLOWED || __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWEDkCFCalendarUnitQuarter = (1UL << 11),
#endif
#if MAC_OS_X_VERSION_10_7 <= MAC_OS_X_VERSION_MAX_ALLOWED || __IPHONE_5_0 <= __IPHONE_OS_VERSION_MAX_ALLOWEDkCFCalendarUnitWeekOfMonth = (1UL << 12),kCFCalendarUnitWeekOfYear = (1UL << 13),kCFCalendarUnitYearForWeekOfYear = (1UL << 14),
#endif
};

下面是真机截图:

以上是在我真机iOS5系统上的测试效果,主界面中的展示效果以及通知栏内的通知效果,在iOS5之前都会出现类似弹出一个框,框中有你设置的按钮名称和提示文字~

OK,这个知识点就不多说了,比较easy;下面介绍如何在cocos2d中添加UIScrollView;

对于UIScrollView视图,比较常用,Android也有此视图,那么它用途比较广,最常用也是最容易想到的就是利用此功能实现游戏中公司介绍、字幕滚动效果,那么Himi就简单的实现在cocos2d中利用UIScrollView添加一个无线循环滚动的小例子加以讲解;

注意:对于还不知道如何在cocos2d中添加系统组建的童鞋请移步到《【Cocos2d游戏开发之七】在cocos2d中添加/删除系统组件,并解决View设置透明会影响View中的其他组件的问题!》此贴学习先,下面开始添加:

首先我们新建一个cocos2d项目,然后添加显示一个自定义的MyView(UIViewController)的视图,并且在MyView.xib中添加了一些label和ScrollView组件中;

如下图:

然后修改MyView.h,和MyView.m类,在MyView.h中如下代码:

@interface MyView : UIViewController<UIScrollViewDelegate>{IBOutlet UIScrollView *scrollView;
}
@property(nonatomic,retain)IBOutlet UIScrollView *scrollView;
@end

.h类中添加了一个UIScrollView并使用UIScrollViewDelegate协议,并IBOutlet出去,接着让xib文件中的UIScrollView组件连接此scrollView;

之后在MyView.m中添加如下代码:

1.添加一行如下代码:

@synthesize scrollView;

2.在- (void)viewDidLoad{}中添加如下代码:

- (void)viewDidLoad
{[super viewDidLoad];//滚动view scrollView.delegate = self;scrollView.scrollEnabled = YES; scrollView.contentSize = CGSizeMake(100, 249);//设置滚动的可视区域// Do any additional setup after loading the view from its nib.
}

整个MyView.m代码如下:

//
//  MyView.m
//  ScrollViewByHimi
//
//  Created by 华明 李 on 11-10-22.
//  Copyright (c) 2011年 __MyCompanyName__. All rights reserved.
//#import "MyView.h"@implementation MyView
@synthesize scrollView;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {// Custom initialization}return self;
}- (void)didReceiveMemoryWarning
{// Releases the view if it doesn't have a superview.[super didReceiveMemoryWarning];// Release any cached data, images, etc that aren't in use.
}#pragma mark - View lifecycle- (void)viewDidLoad
{[super viewDidLoad];//滚动view scrollView.delegate = self;scrollView.scrollEnabled = YES; scrollView.contentSize = CGSizeMake(100, 249);//设置滚动的可视区域// Do any additional setup after loading the view from its nib.
}- (void)viewDidUnload
{[super viewDidUnload];// Release any retained subviews of the main view.// e.g. self.myOutlet = nil;
}- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{// Return YES for supported orientationsreturn (interfaceOrientation == UIInterfaceOrientationPortrait);
}@end

OK,运行代码即可,运行效果如下:

可以拖动ScrollView中的数据了,ScrollView默认显示滚动条的,可以代码设置隐藏也可以xib中对ScrollView属性调整都可以;

 下面介绍如何让ScrollView中的数据无限循环运动:

首先在HelloWorldLayer.m种的init添加我们自定义view的下面设置一个选择器:

[self schedule:@selector(viewAddPointY) interval:0.03];//每0.03秒执行一次viewAddPointY方法

然后viewAddPointY方法是Himi自定义的函数,代码如下:

-(void)viewAddPointY{view.scrollView.contentOffset=ccpAdd(view.scrollView.contentOffset, ccp(0,0.5));//让UIScrollView显示内容每次慢慢向上移动0.5像素//view.scrollView.contentSize.height :得到UIScrollView的高度if(view.scrollView.contentOffset.y>=view.scrollView.contentSize.height){view.scrollView.contentOffset=ccp(0,-view.scrollView.frame.size.height);}
}

运行效果如下:

备注:我的Xcode是4.2用的模拟器是iOS5的模拟器,可能童鞋们按照我的这个教程运行后发现虽然UIScrollView中的数据滚动了但是没有循环播放,这个是因为模拟器的问题,Himi真机测试无问题的~

好了,最后我把 HelloWorldLayer.h 和HelloWorldLayer.m也完整放上来,省得有的童鞋不知道添加代码的地方也方便童鞋们拷贝代码;

HelloWorldLayer.h

//
//  HelloWorldLayer.h
//  ScrollViewByHimi
//
//  Created by 华明 李 on 11-10-22.
//  Copyright __MyCompanyName__ 2011年. All rights reserved.
//// When you import this file, you import all the cocos2d classes
#import "cocos2d.h"
#import "MyView.h"
// HelloWorldLayer
@interface HelloWorldLayer : CCLayer
{MyView *view;
}// returns a CCScene that contains the HelloWorldLayer as the only child
+(CCScene *) scene;@end

HelloWorldLayer.m

//
//  HelloWorldLayer.m
//  ScrollViewByHimi
//
//  Created by 华明 李 on 11-10-22.
//  Copyright __MyCompanyName__ 2011年. All rights reserved.
//// Import the interfaces
#import "HelloWorldLayer.h"
#import "MyView.h"
// HelloWorldLayer implementation
@implementation HelloWorldLayer+(CCScene *) scene
{ CCScene *scene = [CCScene node]; HelloWorldLayer *layer = [HelloWorldLayer node]; [scene addChild: layer]; return scene;
}-(id) init
{ if( (self=[super init])) {view= [[MyView alloc] initWithNibName:@"MyView" bundle:nil];  [[[CCDirector sharedDirector] openGLView] addSubview:view.view];  [self schedule:@selector(viewAddPointY) interval:0.03];//每0.03秒执行一次viewAddPointY方法}return self;
}
-(void)viewAddPointY{view.scrollView.contentOffset=ccpAdd(view.scrollView.contentOffset, ccp(0,0.5));//让UIScrollView显示内容每次慢慢向上移动0.5像素//view.scrollView.contentSize.height :得到UIScrollView的高度if(view.scrollView.contentOffset.y>=view.scrollView.contentSize.height){view.scrollView.contentOffset=ccp(0,-view.scrollView.frame.size.height);}
}- (void) dealloc
{  [super dealloc];
}
@end

OK,本篇结束;再次提醒下,希望大家转载的时候不要忘记给原文连接,看到不少论坛转载完全变成他们论坛自己原创了~ 请大家配合下哈~谢谢~

【2011年11月15日更新:】

注意:有的童鞋使用系统的UIScrollView的时候出现如下问题:

《因为尝试了些coco2d写的scrollview感觉效果都不太理想,所以打算用UIScrollView来实现一些功能的,可是遇到这样一个棘手的问题,感觉整个cocos2d都停止了一样,连显示的FPS也停了,只要scrollview一停止滑动,所有的动画效果都立刻恢复了。。。请问有高人知道怎么解决这个问题么?感激不禁~》

解决方法如下:

0.99.5版本的..首先:在CCDirectorIOS.m 文件中 第640行 找到以下注释.//
// If you want to attach the opengl view into UIScrollView
// uncomment this line to prevent 'freezing'. It doesn't work on
// with the Fast Director
//
// [[NSRunLoop currentRunLoop] addTimer:animationTimerforMode:NSRunLoopCommonModes];   <-去掉这行代码注释.第二.
在 AppDelegate.m 文件中找到.
if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )  <-注释这一行  强制设置 CCDirector 为kCCDirectorTypeNSTimer类型.[CCDirector setDirectorType:kCCDirectorTypeNSTimer];<- 如果类型不是kCCDirectorTypeNSTimer,则设置类型为 kCCDirectorTypeNSTimer搞定..

【iOS-Cocos2d游戏开发之十六】添加本地通知(UILocalNotification)以及添加系统组件滚动视图(UIScrollView)!【2011年11月15日更新】相关推荐

  1. 【历史上的今天】11 月 15 日:全球首款商用微处理器;微软进军游戏界;ICQ 诞生

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 11 月 15 日,在 1982 年的今天,我国第一家婚姻介绍所成立:在 80 年代初," ...

  2. 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星 ...

  3. 苍蓝誓约服务器维护什么时候结束,苍蓝誓约手游2021年7月15日停服维护公告_苍蓝誓约手游2021年7月15日更新了什么_玩游戏网...

    苍蓝誓约手游将在2021年7月15日进行短暂的维护更新哦!想了解2021年7月15日更新情况如何的小伙伴们,下面就让我们一起来看一下吧! 尊敬的指挥官您好: 时间是让人猝不及防的惊喜!<苍蓝誓约 ...

  4. Go 语言又称 Golang,是谷歌(Google)开发的一种静态强类型、编译型、并发型的编程语言。2009 年 11 月 10 日,Go 语言以开源方式向全球发布,如今许多大公司纷纷选择使用 Go

    Go 语言又称 Golang,是谷歌(Google)开发的一种静态强类型.编译型.并发型的编程语言.2009 年 11 月 10 日,Go 语言以开源方式向全球发布,如今许多大公司纷纷选择使用 Go ...

  5. 剑侠世界手游服务器维护公告,《剑侠世界》手游11月15日iOS安卓停服维护公告...

    亲爱的少侠: 为了优化体验保证服务质量,<剑侠世界>手游iOS全服将于11月15日8:00停服维护,预计维护2小时.具体的维护内容和开服时间,根据实际维护情况而定,如未能完成维护相关事宜, ...

  6. 【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  7. 【Visual C 】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  8. [原]【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  9. 【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

  10. 放开那三国服务器维护中是什么意思,《放开那三国2》游戏11月25日更新维护公告...

    亲爱的主公: 为了给各位主公提供更好的游戏体验,<放开那三国2>服务器将2016年11月25日14:00-16:00进行停服更新,具体开服时间可能会根据实际情况延后或提前,由此给您带来的不 ...

最新文章

  1. Windows 编程[9] - WM_CLOSE 消息
  2. Google和网易有道合作开课了
  3. java out.write ie8_整理一下最近遇到的ie8兼容问题
  4. 2019,一线程序员该如何面对中年危机?
  5. vue组件级路由钩子函数介绍,及实际应用
  6. 实现物联网项目,你需要提前知道的6件事情
  7. java servlet 返回404_java项目访问servlet出现404
  8. WIFI 网络操作--------------------笔记
  9. 照片有灵异鬼影?伯克利 x 陈启峰培育高能FCN“除灵师” | CVPR论文
  10. SAP HANA创建类型(SAP HANA CREATE TYPE):
  11. ‘Microsoft Office Enterprise 2007 在安装过程中出错‘ 的解决方法
  12. 帷幕的帷是什么意思_美术生每天坚持练习|但越画越差的原因是什么?
  13. 5G协议流程-UE初始接入、F1启动小区激活
  14. 也说“不战而屈人之兵”
  15. 领导邀请一起跳槽?搞清楚这5件事再决定
  16. html页面百度分享代码,使用百度分享api实现网页分享功能代码
  17. APS系统的现状以及与MES系统的关联
  18. 激光雷达基础:坐标系
  19. Flink 相关操作
  20. 搜狗输入法5.0_马化腾又出手!将全资收购搜狗,后者盘前疯涨超45%

热门文章

  1. CAD给标注尺寸加上下公差的方法
  2. viso 画背景框_officevisio怎么设置背景图和图纸...
  3. 关于java.lang.IllegalArgumentException: KFC Crazy Thursday need $50的问题
  4. PYTHON利用REMOVEBG库实现抠图
  5. 张老师面试题讲解——交通信号灯
  6. Alphabet执行董事长明年1月辞职,谷歌高管大洗牌
  7. 64位处理器_计算机基础:处理器
  8. 一次泛微OA宕机事件的解决。
  9. SCCM 2012 R2部署,安装SCCM(四)
  10. Linux man --显示在线手册页