添加本地通知(UILocalNotification)以及添加系统组件滚动视图(UIScrollView)

来源:互联网 发布:java定义json字符串 编辑:程序博客网 时间:2024/05/23 21:52
本文出处http://xiaominghimi.blog.51cto.com/2614927/695313
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xiaominghimi.blog.51cto.com/2614927/695313

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

 

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

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

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

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

 

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

 

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

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

 

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

 

下面是真机截图:

 

 

以上是在我真机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中如下代码:

 

  1. @interface MyView : UIViewController<UIScrollViewDelegate>{   
  2.     IBOutlet UIScrollView *scrollView;   
  3. }   
  4. @property(nonatomic,retain)IBOutlet UIScrollView *scrollView;   
  5. @end  

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

 

 

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

         1.添加一行如下代码:

 

  1. @synthesize scrollView;   

 

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

 

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

 整个MyView.m代码如下:

 

  1. //   
  2. //  MyView.m   
  3. //  ScrollViewByHimi   
  4. //   
  5. //  Created by 华明 李 on 11-10-22.   
  6. //  Copyright (c) 2011年 __MyCompanyName__. All rights reserved.   
  7. //   
  8.    
  9. #import "MyView.h"   
  10.    
  11. @implementation MyView   
  12. @synthesize scrollView;   
  13. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil   
  14. {   
  15.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];   
  16.     if (self) {   
  17.         // Custom initialization   
  18.     }   
  19.     return self;   
  20. }   
  21.    
  22. - (void)didReceiveMemoryWarning   
  23. {   
  24.     // Releases the view if it doesn't have a superview.   
  25.     [super didReceiveMemoryWarning];   
  26.        
  27.     // Release any cached data, images, etc that aren't in use.   
  28. }   
  29.    
  30. #pragma mark - View lifecycle   
  31.    
  32. - (void)viewDidLoad   
  33. {   
  34.     [super viewDidLoad];   
  35.     //滚动view    
  36.     scrollView.delegate = self;   
  37.     scrollView.scrollEnabled = YES;    
  38.     scrollView.contentSize = CGSizeMake(100, 249);//设置滚动的可视区域   
  39.     // Do any additional setup after loading the view from its nib.   
  40. }   
  41.    
  42. - (void)viewDidUnload   
  43. {   
  44.     [super viewDidUnload];   
  45.     // Release any retained subviews of the main view.   
  46.     // e.g. self.myOutlet = nil;   
  47. }   
  48.    
  49. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation   
  50. {   
  51.     // Return YES for supported orientations   
  52.     return (interfaceOrientation == UIInterfaceOrientationPortrait);   
  53. }   
  54.    
  55. @end  

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

 

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

 

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

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

 

 

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

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

 

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

运行效果如下:

 

 

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

 

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

HelloWorldLayer.h

 

  1. //   
  2. //  HelloWorldLayer.h   
  3. //  ScrollViewByHimi   
  4. //   
  5. //  Created by 华明 李 on 11-10-22.   
  6. //  Copyright __MyCompanyName__ 2011年. All rights reserved.   
  7. //   
  8.    
  9.    
  10. // When you import this file, you import all the cocos2d classes   
  11. #import "cocos2d.h"   
  12. #import "MyView.h"   
  13. // HelloWorldLayer   
  14. @interface HelloWorldLayer : CCLayer   
  15. {   
  16.     MyView *view;   
  17. }   
  18.    
  19. // returns a CCScene that contains the HelloWorldLayer as the only child   
  20. +(CCScene *) scene;   
  21.    
  22. @end   

 

HelloWorldLayer.m

 

  1. //   
  2. //  HelloWorldLayer.m   
  3. //  ScrollViewByHimi   
  4. //   
  5. //  Created by 华明 李 on 11-10-22.   
  6. //  Copyright __MyCompanyName__ 2011年. All rights reserved.   
  7. //   
  8.    
  9.    
  10. // Import the interfaces   
  11. #import "HelloWorldLayer.h"   
  12. #import "MyView.h"   
  13. // HelloWorldLayer implementation   
  14. @implementation HelloWorldLayer   
  15.    
  16. +(CCScene *) scene   
  17. {    
  18.     CCScene *scene = [CCScene node];    
  19.     HelloWorldLayer *layer = [HelloWorldLayer node];    
  20.     [scene addChild: layer];    
  21.     return scene;   
  22. }   
  23.     
  24. -(id) init   
  25. {    
  26.     if( (self=[super init])) {   
  27.            
  28.         view= [[MyView alloc] initWithNibName:@"MyView" bundle:nil];     
  29.         [[[CCDirector sharedDirector] openGLView] addSubview:view.view];     
  30.         [self schedule:@selector(viewAddPointY) interval:0.03];//每0.03秒执行一次viewAddPointY方法   
  31.     }   
  32.     return self;   
  33. }   
  34. -(void)viewAddPointY{   
  35.     view.scrollView.contentOffset=ccpAdd(view.scrollView.contentOffset, ccp(0,0.5));//让UIScrollView显示内容每次慢慢向上移动0.5像素   
  36.     //view.scrollView.contentSize.height :得到UIScrollView的高度   
  37.     if(view.scrollView.contentOffset.y>=view.scrollView.contentSize.height){   
  38.         view.scrollView.contentOffset=ccp(0,-view.scrollView.frame.size.height);   
  39.     }   
  40. }   
  41.     
  42. - (void) dealloc   
  43. {     
  44.     [super dealloc];   
  45. }   
  46. @end   

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


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 精索曲张最近一打篮球就蛋疼怎么办 都两天了快递还是显示已发货怎么办 中通快递到达一天就是不派送怎么办 顺丰派送员把快递寄错了怎么办 顺丰快递把户籍卡弄丢了怎么办 金立手机不小心设置成英文了怎么办 三星手机不小心设置成英文了怎么办 手游方舟国际版渡渡鸟跟丢了怎么办 一打电话4g变2g怎么办 手机4g突然变2g怎么办 江湖风云录八卦门任务拒绝了怎么办 百度网盘下载时显示违规信息怎么办 在海马助手下载的游戏闪退怎么办 手机版百度云盘不能普通下载怎么办 手机版百度云盘一直加载中怎么办 登别人的网盘单同步通讯录了怎么办 被培训公司骗了贷款之后该怎么办 乐教乐学孩子登陆你那忘记了怎么办 脸擦破了痂掉了留斑怎么办 挤黑头后鼻子又红又疼怎么办 香奈儿邂逅清新淡香水不喷怎么办 脚面被压了肿起来了怎么办 每天加班很累反而失眠严重怎么办 减肥药吃了口臭嘴巴苦怎么办 上火引起的牙疼怎么办吃什么药 舌苔厚口气重怎么办应该吃什么药 宝宝老是额头热四肢不热怎么办 考老师考砸了心理崩溃了怎么办 苹果手机一会白屏一会黑屏怎么办 360云盘的东西删不了怎么办 手机邮箱打开的文件疑似病毒怎么办 电脑qq发送的文件失效了怎么办 小米4c温控文件打开是乱码怎么办 超星尔雅用学号登录密码忘了怎么办 全脸做激光去黄褐斑后脸发红怎么办 上传到微云中的视频下载不了怎么办 微云保存的小电影下载不了怎么办 苹果手机下载有云朵下载不了怎么办 手机下载登录忘了密码了怎么办 软软件被手机加密忘了密码怎么办 苹果手机想下载东西忘了密码怎么办