淺析iPhone SDK開(kāi)發(fā)基礎(chǔ)之OpenFlow編程
iPhone SDK開(kāi)發(fā)基礎(chǔ)之OpenFlow編程是本文要將誒少的內(nèi)容,當(dāng)用戶界面需要按頁(yè)面顯示圖片時(shí),使用OpenFlow庫(kù)提供的功能,將要顯示的用戶界面圖片分頁(yè)進(jìn)行顯示會(huì)使編程工作變得非??旖?。該庫(kù)提供了與OS X桌面Finder程序相同的視覺(jué)效果,如圖3-46所示就是一個(gè)使用OpenFlow庫(kù)逐頁(yè)進(jìn)行圖片顯示的程序,用戶按下屏幕即可進(jìn)行左右滾動(dòng)顯示,雙擊圖片即可對(duì)當(dāng)前顯示的圖片進(jìn)行選取操作,如圖:
程序在視圖控制器的viewDidAppear()中使用refreshCoverFlow()函數(shù)初始化OpenFlow庫(kù),通過(guò)setNumberOfImages()函數(shù)設(shè)置圖片數(shù)量,代碼如下。
- // RootViewController.m
- - (void)refreshCoverFlow{
- CGRect bounds = [[UIScreen mainScreen] bounds];
- AFOpenFlowView *coverFlowView = (AFOpenFlowView*)[self.view viewWithTag:kTagCoverflow];
- if(coverFlowView != nil)
- [coverFlowView removeFromSuperview];
- coverFlowView = [[AFOpenFlowView alloc] initWithFrame:CGRectMake(0, -30, bounds.size.width, COVERFLOWHEIGHT)];
- coverFlowView.dataSource = self;
- coverFlowView.viewDelegate = self;
- coverFlowView.defaultImage = [self defaultImage];
- coverFlowView.tag = kTagCoverflow;
- [self.view addSubview:coverFlowView];
- NSInteger count = [self numberOfAnimals];
- [coverFlowView setNumberOfImages:count];
- //...
- [coverFlowView release];
- }
并在loadView()中初始化圖片,將圖片從資源中加載并保存在一個(gè)NSMutableArray類型的變量imageArray中,代碼如下。
- - (BOOL)doAddAnimal:(NSString *)name Image:(NSString *)imageName{
- UIImage *image = [UIImage imageNamed: imageName];
- if(image == nil) return FALSE;
- CGSize size = CGSizeMake(179, 208);
- [imageArray addObject:[self resizeImage:image scaledToSize:size]];
- return TRUE;
- }
在OpenFlow庫(kù)的requestImageForIndex delegate方法中直接通過(guò)NSMutableArray的索引作為OpenFlow庫(kù)的圖片索引,并通過(guò)該索引設(shè)置和獲取具體圖片,代碼如下。
- // PageViewController.m
- - (void)openFlowView:(AFOpenFlowView *)openFlowView requestImageForIndex: (int)index{
- UIImage *image = [imageArray objectAtIndex:index];
- [openFlowView setImage:image forIndex:index];
- }
筆者在OpenFlow庫(kù)AFOpenFlowView.m文件的touchesEnded()函數(shù)中增加了雙擊回調(diào)接口,以便在用戶雙擊圖片時(shí)通知庫(kù)的調(diào)用者,代碼如下。
- //AFOpenFlowView.m
- - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
- if(((UITouch *)[touches anyObject]).tapCount == 2){
- if ([self.viewDelegate respondsToSelector:@selector(openFlowView: coverViewDoubleClick:)])
- [self.viewDelegate openFlowView:self coverViewDoubleClick: selectedCoverView.number];
- }
- [super touchesEnded:touches withEvent:event];
- }
庫(kù)的調(diào)用者RootViewController類通過(guò)接口函數(shù)coverViewDoubleClick()即可處理用戶雙擊事件,代碼如下。
- - (void)openFlowView:(AFOpenFlowView *)openFlowView coverViewDoubleClick:(int)index{
- NSLog(@"coverViewDoubleClick called!");
- [self showPaintingViewController];
小結(jié):淺析iPhone SDK開(kāi)發(fā)基礎(chǔ)之OpenFlow編程的內(nèi)容介紹完了,希望通過(guò)本文的學(xué)習(xí)能對(duì)你有所幫助!