zoukankan      html  css  js  c++  java
  • 斯坦福IOS开发第五课(第一部分)

    转载请注明出处

    http://blog.csdn.net/pony_maggie/article/details/27706991


    作者:小马


    因为第五课的内容比較多。分两部分来写。

    一 屏幕旋转基本操作


     

    控制当前的view是否支持旋转,假设是,是支持哪些方向的,有四个方向,各自是home键在下。上。左右.

    在当前的viewcontroller里,实现shouldAutorotateToInterfaceOrientation方法。告诉系统你支持的旋转方向,例如以下:

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    {
       return YES; //四个方向都支持
       //return UIInterfaceOrientationIsPortrait(interfaceOrientation); //仅仅支持直立
     
      //return (interfaceOrientation==UIInterfaceOrientationLandscapeLeft) //横向Home键在左
     
      //return (interfaceOrientation== UIInterfaceOrientationLandscapeRight) //横向Home键在右
     
      //return (interfaceOrientation== UIInterfaceOrientationPortrait) //竖向正常
     
      //return (interfaceOrientation==UIInterfaceOrientationLandscapeLeft) //竖向Home键在上
     
    }


    假设没有实现这种方法,默认是不支持旋转,仅仅有portrait。


    只是IOS6以后,这种方法被列为DEPRECATED 方法了,不能再用了. 用两个新的方法取代.

    (注意,为了向后兼容iOS 4 and 5,还是须要在你的app里保留shouldAutorotateToInterfaceOrientation)

     

    supportedInterfaceOrientations shouldAutorotate

     

    假设是不能旋转。仅仅须要

    - (BOOL)shouldAutorotate
    {
       return NO;
    }
     


    比方要支持横向

    -(NSUInteger)supportedInterfaceOrientations
    {
       return UIInterfaceOrientationMaskAllButUpsideDown;
    }
    
    - (BOOL)shouldAutorotate
    {
       return YES;
    }
    

     

    同一时候,还须要在Info.plist文件中面加入程序支持的方向。假设没有实现上述两个方法,iphone默认是仅支持横向旋转。

     

    Struts and springs

     

    这是一个老的布局模型。xcode4.5之后默认都是用Autolayout,所以不会看到以下这种Struts and springs,例如以下图:


     

    假设想用这个,在project里把useAutolayout的box勾选掉。Struts and springs能够设置当一个视图的父视图大小改变时。其自身须要做出什么改变。

    比方从纵向变成横向时,可能有必要对一些控件做一些拉伸等。注意看上图左别边部分。分为两部分。外层是一些像大写字母I一样的东西。这些控制当父视图改变时,子视图应该怎么里层的像箭头一样的控制当父视图改变时,子视图应该怎么“拉伸”。当然Struts and springs并非万能的。它仅仅能处理一些简单的情况。有一些场景还是须要用代码来完毕的。设想一下假设一个计算器的应用,从纵向变成横向。可不是简单拉伸一些button即可的,这样的情况就要写代码来做一些布局了。

     

    因为篇幅有限。这里就不具体举样例了。推荐一篇关于自己主动布局比較好的文章:

    http://www.cocoachina.com/applenews/devnews/2013/1203/7462.html

     

    三 协议

    这节课有10分钟左右的时间讲了一下协议。由于我之前的文章对这个已经有描写叙述,这里就不做过多介绍了。

    四 手势识别

    手势识别的核心是UIGestureRecognizer类。通过两个步骤就能够加入一个手势识别的功能。一是在UIView里加入gesture,二是实现一个处理函数,这些在下一部分的演示样例代码中都会看得到。

     须要注意的是。第一步一般是在controller完毕,第二个是在UIView里做。这样的思想源于对UIView的复用性考虑,也就是我们要考虑一个UIView会被多个controller使用,可能不用的controller会有不同的手势识别需求。


     

    这里给了一个加入手势识别的演示样例,这段代码当然是最好放在controller实现部分。这里面的pan函数就是上面提到的处理函数。也就是当某个手势触发时要运行的动作。


     

    上面给出了UIGestureRecognizer(或者其子类)提供的方法和属性,这些方法和属性协助我们实现处理函数,由于处理函数有一个默认的參数就是UIGestureRecognizer(或者其子类)的实际。比方这种代码:

    //手势识别,缩放功能
    - (void)pinch:(UIPinchGestureRecognizer *)gesture
    {
        if ((gesture.state == UIGestureRecognizerStateChanged) ||
            (gesture.state == UIGestureRecognizerStateEnded))
        {
            /*
             以下两行代码事实上和这一行效果是一样的,所以注意理解第二行置1的作用.能够查一下gesture.scale是怎么取值的
             self.scale = gesture.scale;
             */
            self.scale *= gesture.scale;
            NSLog(@"scale:%f", gesture.scale);
            gesture.scale = 1;
        }
    }



    然后我们看到这里给出三个详细的UIGestureRecognizer的子类,分别用于处理缩放,翻转以及滑动的手势。

    第二部分我们会讲到代码演示样例。

  • 相关阅读:
    STM32 CubeMX 学习:004-PWM
    MyBase 7.1 可用的 Markdown 配置表
    STM32 CubeMX 学习:003-定时器
    STM32 CubeMX 学习:002-外部中断的使用
    Kubernetes资源对象之RS
    Kubernetes资源对象之Deployment
    Kubernetes基础资源对象之service
    Kubernetes资源对象之RC
    Kubernetes基础资源对象之Pod
    libev
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5155723.html
Copyright © 2011-2022 走看看