zoukankan      html  css  js  c++  java
  • 添加本地通知(UILocalNotification)以及添加系统组件滚动视图(UIScrollView)

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

  • 相关阅读:
    机器学习
    octave安装使用
    学习pytorch
    安装Pytorch
    下载软件的好地方
    python 内置模块time timedate random
    关于git
    python软件目录结构规范
    python 内置参数
    test
  • 原文地址:https://www.cnblogs.com/hopeanCom/p/2781878.html
Copyright © 2011-2022 走看看