日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

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

發(fā)布時(shí)間:2023/12/20 windows 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【iOS-Cocos2d游戏开发之十六】添加本地通知(UILocalNotification)以及添加系统组件滚动视图(UIScrollView)!【2011年11月15日更新】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?李華明Himi?原創(chuàng),轉(zhuǎn)載務(wù)必在明顯處注明:
轉(zhuǎn)載自 【黑米GameDev街區(qū)】?原文鏈接:? http://www.himigame.com/iphone-cocos2d/492.html


-------------【11月28日更新解決添加組件Cocos2d動(dòng)畫(huà)停止播放的BUG】--------

【iOS-Cocos2d游戲開(kāi)發(fā)之七】在cocos2d中添加/刪除系統(tǒng)組件,并解決View設(shè)置透明會(huì)影響View中的其他組件的問(wèn)題【11月28日更新解決添加組件Cocos2d動(dòng)畫(huà)停止播放的BUG】


? ? ? ? ? 首先申明下:希望大家轉(zhuǎn)載的時(shí)候不要忘記給原文連接,看到不少論壇轉(zhuǎn)載完全變成他們論壇自己原創(chuàng)了~ 請(qǐng)大家配合哈~謝謝~娃哈哈;

? ? ? ? ?本篇Himi為童鞋們介紹兩個(gè)常用的知識(shí)點(diǎn):一個(gè)是在Cocos2d中添加UILocalNotification本地化通知,另外一個(gè)就是添加UIScrollViewiOS系統(tǒng)組件實(shí)現(xiàn)滾動(dòng)字幕效果;

? ? ? ? ? 對(duì)于UILocalNotification這個(gè)本地化通知功能實(shí)現(xiàn)比較簡(jiǎn)單,用途很廣,最大的用途就是階段性的讓用戶回歸我們的應(yīng)用中;那么下面就直接上代碼:

? ? ? ? ? 因?yàn)槭翘砑拥絚ocos2d引擎中,另一方面一般我們需要用戶進(jìn)入我們應(yīng)用后就開(kāi)啟通知功能的;所以我們將代碼放在 AppDelegate.m 類中的applicationDidFinishLaunching中,代碼如下:

? ? ? ? ? ? ?

- (void) applicationDidFinishLaunching:(UIApplication*)application {...application.applicationIconBadgeNumber = 0;//應(yīng)用程序右上角的數(shù)字=0(消失)[[UIApplication sharedApplication] cancelAllLocalNotifications];//取消所有的通知//------通知;UILocalNotification *notification=[[UILocalNotification alloc] init]; if (notification!=nil) {//判斷系統(tǒng)是否支持本地通知notification.fireDate=[NSDate dateWithTimeIntervalSinceNow:kCFCalendarUnitDay];//本次開(kāi)啟立即執(zhí)行的周期notification.repeatInterval=kCFCalendarUnitDay;//循環(huán)通知的周期notification.timeZone=[NSTimeZone defaultTimeZone];notification.alertBody=@"哇,我的女神,你怎了?";//彈出的提示信息notification.applicationIconBadgeNumber=1; //應(yīng)用程序的右上角小數(shù)字notification.soundName= UILocalNotificationDefaultSoundName;//本地化通知的聲音notification.alertAction = NSLocalizedString(@"營(yíng)救女神!", nil); //彈出的提示框按鈕[[UIApplication sharedApplication] scheduleLocalNotification:notification];} ... }?

? ? ? ? ? ?這里Himi首先是將之前的所有通知都取消掉,防止開(kāi)啟多個(gè)循環(huán)本地化通知,并且讓?xiě)?yīng)用右上角的數(shù)字設(shè)置為0,這里設(shè)置為0就相當(dāng)與取消數(shù)字的顯示了;

? ? ? ? ? ?然后需要說(shuō)明的是循環(huán)通知的周期,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 }; ? ? ? ? 下面是真機(jī)截圖:

? ? ? ? ? ? ??




? ? ? ? ? 以上是在我真機(jī)iOS5系統(tǒng)上的測(cè)試效果,主界面中的展示效果以及通知欄內(nèi)的通知效果,在iOS5之前都會(huì)出現(xiàn)類似彈出一個(gè)框,框中有你設(shè)置的按鈕名稱和提示文字~

? ? ? ? ?OK,這個(gè)知識(shí)點(diǎn)就不多說(shuō)了,比較easy;下面介紹如何在cocos2d中添加UIScrollView;

? ? ? ? 對(duì)于UIScrollView視圖,比較常用,Android也有此視圖,那么它用途比較廣,最常用也是最容易想到的就是利用此功能實(shí)現(xiàn)游戲中公司介紹、字幕滾動(dòng)效果,那么Himi就簡(jiǎn)單的實(shí)現(xiàn)在cocos2d中利用UIScrollView添加一個(gè)無(wú)線循環(huán)滾動(dòng)的小例子加以講解;

? ? ? ? 注意:對(duì)于還不知道如何在cocos2d中添加系統(tǒng)組建的童鞋請(qǐng)移步到《【Cocos2d游戲開(kāi)發(fā)之七】在cocos2d中添加/刪除系統(tǒng)組件,并解決View設(shè)置透明會(huì)影響View中的其他組件的問(wèn)題!》此貼學(xué)習(xí)先,下面開(kāi)始添加:

? ? ? ? ?首先我們新建一個(gè)cocos2d項(xiàng)目,然后添加顯示一個(gè)自定義的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類中添加了一個(gè)UIScrollView并使用UIScrollViewDelegate協(xié)議,并IBOutlet出去,接著讓xib文件中的UIScrollView組件連接此scrollView;


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

? ? ? ? ?1.添加一行如下代碼:

@synthesize scrollView;? ? ? ? ?2.在- (void)viewDidLoad{}中添加如下代碼:

- (void)viewDidLoad {[super viewDidLoad];//滾動(dòng)view scrollView.delegate = self;scrollView.scrollEnabled = YES; scrollView.contentSize = CGSizeMake(100, 249);//設(shè)置滾動(dòng)的可視區(qū)域// Do any additional setup after loading the view from its nib. }
? ? 整個(gè)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];//滾動(dòng)view scrollView.delegate = self;scrollView.scrollEnabled = YES; scrollView.contentSize = CGSizeMake(100, 249);//設(shè)置滾動(dòng)的可視區(qū)域// 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,運(yùn)行代碼即可,運(yùn)行效果如下:

? ? ? ? ? ? ? ?

? ? ? ?可以拖動(dòng)ScrollView中的數(shù)據(jù)了,ScrollView默認(rèn)顯示滾動(dòng)條的,可以代碼設(shè)置隱藏也可以xib中對(duì)ScrollView屬性調(diào)整都可以;


? ? ? ? ? ? ?下面介紹如何讓ScrollView中的數(shù)據(jù)無(wú)限循環(huán)運(yùn)動(dòng):

? ? ? ?首先在HelloWorldLayer.m種的init添加我們自定義view的下面設(shè)置一個(gè)選擇器:

[self schedule:@selector(viewAddPointY) interval:0.03];//每0.03秒執(zhí)行一次viewAddPointY方法 ? ? ? 然后viewAddPointY方法是Himi自定義的函數(shù),代碼如下:

-(void)viewAddPointY{view.scrollView.contentOffset=ccpAdd(view.scrollView.contentOffset, ccp(0,0.5));//讓UIScrollView顯示內(nèi)容每次慢慢向上移動(dòng)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);} }
? ? 運(yùn)行效果如下:


? ? ? ? ? ? ? ? ??


? ? ? 備注:我的Xcode是4.2用的模擬器是iOS5的模擬器,可能童鞋們按照我的這個(gè)教程運(yùn)行后發(fā)現(xiàn)雖然UIScrollView中的數(shù)據(jù)滾動(dòng)了但是沒(méi)有循環(huán)播放,這個(gè)是因?yàn)槟M器的問(wèn)題,Himi真機(jī)測(cè)試無(wú)問(wèn)題的~

?

? ? ? 好了,最后我把 HelloWorldLayer.h 和HelloWorldLayer.m也完整放上來(lái),省得有的童鞋不知道添加代碼的地方也方便童鞋們拷貝代碼;


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秒執(zhí)行一次viewAddPointY方法}return self; } -(void)viewAddPointY{view.scrollView.contentOffset=ccpAdd(view.scrollView.contentOffset, ccp(0,0.5));//讓UIScrollView顯示內(nèi)容每次慢慢向上移動(dòng)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,本篇結(jié)束;再次提醒下,希望大家轉(zhuǎn)載的時(shí)候不要忘記給原文連接,看到不少論壇轉(zhuǎn)載完全變成他們論壇自己原創(chuàng)了~ 請(qǐng)大家配合下哈~謝謝~


【2011年11月15日更新:】

?注意:有的童鞋使用系統(tǒng)的UIScrollView的時(shí)候出現(xiàn)如下問(wèn)題:

? ? ? ?《因?yàn)閲L試了些coco2d寫(xiě)的scrollview感覺(jué)效果都不太理想,所以打算用UIScrollView來(lái)實(shí)現(xiàn)一些功能的,可是遇到這樣一個(gè)棘手的問(wèn)題,感覺(jué)整個(gè)cocos2d都停止了一樣,連顯示的FPS也停了,只要scrollview一停止滑動(dòng),所有的動(dòng)畫(huà)效果都立刻恢復(fù)了。。。請(qǐng)問(wèn)有高人知道怎么解決這個(gè)問(wèn)題么?感激不禁~》

解決方法如下:

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] ) <-注釋這一行 強(qiáng)制設(shè)置 CCDirector 為kCCDirectorTypeNSTimer類型.[CCDirector setDirectorType:kCCDirectorTypeNSTimer];<- 如果類型不是kCCDirectorTypeNSTimer,則設(shè)置類型為 kCCDirectorTypeNSTimer搞定..




總結(jié)

以上是生活随笔為你收集整理的【iOS-Cocos2d游戏开发之十六】添加本地通知(UILocalNotification)以及添加系统组件滚动视图(UIScrollView)!【2011年11月15日更新】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。