IOS之UIKit_Day22--23

Day22

1 UIKit Dynamic

          UIDynamicAnimation

                   UIGravityBehavior

                   UICollisionBehavior

                   UIAttachmentBehavior

                   UISnapBehavior

                   UIPushBehavior

2.CollectionView+AttachmentBehavior

          具有弹簧效果的短消息

3. 通知:山山水水

          NSNotificationCenter   

                   post  发送通知

                   addObserver添加通知

                   NSNotification

         

 

今天

1TMessage

          实现步骤:

                   里程碑1

                   a.分析数据模型

                            TRMessage

                            属性:消息内容 消息的来源

                   b.分析显示界面使用的控件

                            普通的VC做控制器

                            VC自带的视图中可以添加一个TableViewUIView

                   c.分析界面上的不同元素方便添加自定义的类型

                            需要自定义单元格,格内负责显示控件:子+图单元格与TRMessage类型的实例一一对应,一个单元格负责显示一个TRMessage类型的实例

                   d.实现多条消息的显示

                   里程碑2

                   a.分析如何接受

 

 

 

 

 

        Day23

1. Size Class

          随着苹果设备的增多屏幕测尺寸越来越多样化为了解决适配不同设备屏幕的问题,从IOS8开始推出了一项配合Auto Layout一起用的Size Classes技术

          核心理念:抛弃屏幕尺寸的概念,将不同种类的设备分到不同的组合内,制作界面时,关注这个组别,就等于对这组别下的所有设备进行设计界面,运行是,系统会根据当前的设备

          有哪些组别:划分组别的而标准:紧凑型  any   标准型

2. Search Bar《旧版本》

 

3. IOS8 Search      Bar

 

4. 应用程序间的通信

          4.1是什么:

                   是一个应用程序给另一个程序发点消息过去,但是很少例如说:打开图片点击分享打印 共享

 

          4.2 使用场景

                   将一个字符串或者是图片发到微博微信等应用上

          4.3 如何做

                   使用一个叫UIActivityViewController控制器单元完成任务

          4.4 Activity

                   把共享是要操作的项目叫做Activity 比如说拷贝 打印Activity的操作的一种微信微博叫做Acitvity分享

                  

          调用系统的Activity步骤

          step1:创建Activity控制器

                    UIActivityViewController*avc = [[UIActivityViewController alloc]initWithActivityItems:@[text] applicationActivities:nil];        

                   其中 activityItems是要传递的信息 applicationActivity nil 系统会列出支持的所有activity

          step2:设置要排除的Activity(可有  可无)

                   avc.excludedActivityTypes =@[UIActivityTypeMail];

                   UIActivityTypeMail代表的是排除邮箱的共享

          step3:显示出VC

                   [self presentViewController:avcanimated:YES completion:nil];

          4.5 自定义的Activity

                   step1:自己编写一个类继承UIActivity

                   step2:实现内置的方法

1》返回自己的Activity的类型只要唯一即可

          -(NSString *)activityType{

    //获得应用程序所在的沙箱的完整路径

    //NSStringFromClass是根据类,获取类的名称

    return [[NSBundle mainBundle].bundleIdentifierstringByAppendingFormat:@".%@",NSStringFromClass([self class])];

}

2》返回Activity的名称不要求唯一但希望短一点用于显示

-(NSString*)activityTitle{

    return @"反转";

}

3》要显示的图片 Retina86*86  ipad:110*110 大小不符合不会显示

-(UIImage*)activityImage{

    return [UIImage imageNamed:@"icon80"];

}

4》将共享的item传来的数据进行检验看是否可以反转

-(BOOL)canPerformWithActivityItems:(NSArray*)activityItems{

    for (id object in activityItems) {

        if ([object isKindOfClass:[NSString class]]){

            //只要有一个string就调用反转方法

            return YES;

        }

    }

    return NO;

}

5》转换Activity的条目只有要有一个item能用就会到达这个方法

- (void)prepareWithActivityItems:(NSArray*)activityItems{

    //把所有能反转的item挑出来,放到一个数组中

    NSMutableArray *stringObjects = [NSMutableArrayarray];

    for (id object in activityItems) {

        if ([object isKindOfClass:[NSString class]]){

            [stringObjects addObject:object];

        }

    }

    self.activityItems = stringObjects;

}

6》执行activity 编写逻辑—反转

-(void)performActivity{

    // 为了保存每一个反转后的string

    NSMutableString *reverseString = [[NSMutableStringalloc]init];

    //反转

    for (NSString

          *string in self.activityItems) {

        [reverseString appendString:[selfmyReverseString:string]];

        [reverseString appendString:@"\n"];

    }

   

    //显示反转的结果

    UIAlertView *alert = [[UIAlertView  alloc]initWithTitle:@"字符串反转" message:reverseStringdelegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];

    [alert show];

}

7》点击alert中的确定按钮后通知activity动作结束

-(void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

    [self activityDidFinish:YES];

}

///自定义反转的方法

-(NSString*)myReverseString:(NSString *)paramString

{

    NSMutableString *reversed = [[NSMutableStringalloc]init];

    for (NSInteger index = paramString.length-1;index>=0; index--) {

        [reversed appendFormat:@"%c",[paramStringcharacterAtIndex:index]];

    }

    return [reversed copy];

}

 

以上7中方法在编写自定义共享时必须实现

          step3:创建自定义的Activity的对象

          step4:添加activityActivity控制器上

          UIActivityViewController *avc = [[UIActivityViewControlleralloc]initWithActivityItems:itemToShare applicationActivities:@[srActivity]];

          step5:推出vc

           [self presentViewController:avc animated:YES completion:nil];

 

5.横竖屏的判断

step1:设置屏幕支持的方向

          //1 设置屏幕支持的方向

-(NSUInteger)supportedInterfaceOrientations{

    //设置支持的屏幕方向

    return UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskLandscape;

}

step2:获取即将要旋转倒的某个方向

//2 获取倒即将要旋转倒的某个朝向

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientationduration:(NSTimeInterval)duration{

    //判断即将要到达的朝向计算何种布局

    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)){

        //代表的是竖屏  编写竖屏的布局效果

        [self layoutPortrait];

    }else{

        //代表的横屏编写横屏的布局效果

        [self layoutLandscapes];

    }

}

 

step3:界面将要显示之前判断屏幕的方向

//3 界面显示前判断号方向

-(void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

    //判断出来的那一刻

    UIApplication *app=[UIApplication sharedApplication];

    UIInterfaceOrientation orientation=app.statusBarOrientation;

    if (UIInterfaceOrientationIsPortrait(orientation)){

        [self layoutPortrait];

    }else{

        [self layoutLandscapes];

    }

}

posted on 2015-03-11 23:18  蝈蝈512  阅读(189)  评论(0编辑  收藏  举报

导航