• iPhone SDK开发基础之OpenFlow编程


          当用户界面需要按页面显示图片时,使用OpenFlow库提供的功能,将要显示的用户界面图片分页进行显示会使编程工作变得非常快捷。该库提供了与OS X桌面Finder程序相同的视觉效果,如图3-46所示就是一个使用OpenFlow库逐页进行图片显示的程序,用户按下屏幕即可进行左右滚动显示,双击图片即可对当前显示的图片进行选

    取操作。

    程序在视图控制器的viewDidAppear()中使用refreshCoverFlow()函数初始化OpenFlow库,通过setNumberOfImages()函数设置图片数量,代码如下。
    //  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()中初始化图片,将图片从资源中加载并保存在一个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库的requestImageForIndex delegate方法中直接通过NSMutableArray的索引作为OpenFlow库的图片索引,并通过该索引设置和获取具体图片,代码如下。
    //  PageViewController.m
    - (void)openFlowView:(AFOpenFlowView *)openFlowView requestImageForIndex: (int)index{
         UIImage *image =  [imageArray objectAtIndex:index];
      [openFlowView setImage:image forIndex:index];

    }
    笔者在OpenFlow库AFOpenFlowView.m文件的touchesEnded()函数中增加了双击回调接口,以便在用户双击图片时通知库的调用者,代码如下。
    //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]; 
    }
    库的调用者RootViewController类通过接口函数coverViewDoubleClick()即可处理用户双击事件,代码如下。
    - (void)openFlowView:(AFOpenFlowView *)openFlowView coverViewDoubleClick:(int)index{
      NSLog(@"coverViewDoubleClick called!");
      [self showPaintingViewController];

        本节相关的完整Xcode工程源代码文件请参考本书附带的光盘中的OpenFlow工程。
        本文节选自《iOS软件开发揭密:iPhone&iPad企业应用和游戏开发》一书。
        《iOS软件开发揭密:iPhone&iPad企业应用和游戏开发》一书已由电子工业出版社正式出版,本书由虞斌著。

    购买链接:

    互动出版网:
    http://product.china-pub.com/198191

  • 相关阅读:
    349. 两个数组的交集
    383. 赎金信
    242. 有效的字母异位词
    844. 比较含退格的字符串
    904. 水果成篮
    剑指offer(9)变态跳台阶
    剑指offer(8)跳台阶
    剑指offer(7)斐波那契数列
    剑指offer(6)旋转数组的最小数字
    剑指offer(5)用两个栈实现队列
  • 原文地址:https://www.cnblogs.com/broadview/p/2059000.html
Copyright © 2020-2023  润新知