由scroll view引发的一系列小零碎

来源:互联网 发布:淘宝 宝贝分类 编辑:程序博客网 时间:2024/04/26 06:20

在学习scroll View时遇到一些小零碎的知识点. 其实很多控件本身并没有太多需要说的, 很多资料都介绍的很详细了.

更多的是在学习的过程中体会其中的原理,以及 在这过程中遇到的问题,往往这些看似不起眼的小问题, 能够引起一系列的思考.而这些东西才是最宝贵的.


1.scroll view 控件

    我们使用它实现在屏幕上动态的滑动图片,手势控制缩放等等,而这些的实现其实就是对控件内一些属性的控制

self.scrollView.contentSize = CGSizeMake( );
    self.scrollView.contentOffset = CGPointMake(
 );
    self.scrollView.contentInset = UIEdgeInsetsMake(
 );

这三个属性比较重要. 

contensize 这个属性是说明要滚动显示的内容尺寸大小. 这个不要和frame弄混, frame是控件本身的大小.

contentoffset这个属性非常重要,对滚动的操作就是对它修改,配合动画效果,就可以实现我们手机上常见的功能,顾名思义它就是偏移量,它控制滚动的内容在控件frame大小的区域内要显示的部分.也就是但我们手势滑动内容时, 其实是在改变它的值.

contentinset 这个属性可以简单的理解为,在frame控件大小区域内,默认显示内容填充边距, 四个方向的是逆时针设置边距的.


这三个属性的赋值方法类型是不同的,contentSize -----> CGSize; contentOffset ----> CGPoint ; contentInset ----> UIEdgeInsets;  具体使用的时候可以参考定义

==============================

2. 代理

详细说一下,代理是一个对象控制另一个对象去帮忙完成某些事情. 是为了增加对象的灵活性 ,独立性的.

对象A中首先要具备做某种事的能力, 如果不具备这种能力,就无法控制另一个对象B去完成某种事情

对象A中还要有能够跟对象B沟通的能力,是与对象B 交互的直接渠道

对象B中要具备做对象A中某种能力下的 具体实施方案

这样对象A就能不亲自去做某些事情,而是由它的能力去控制其他对象,帮他完成即可. 对象A的独立性更高,更轻便.

对象A:

@class AMPerson;/*凡是遵守协议规范的人,都可以为A提供服务*/@protocol AMPersonDelagate <NSObject> //定义协议,规范代理人B 要符合 A需求@optional- (void) personFindOffer: (AMPerson *) person;  //规范 代理人,应该具备的能力, 找工作;还可以根据需求, 增加找房子,找媳妇等等 ==. @end@interface AMPerson : NSObject@property (nonatomic, copy) NSString *name;@property (nonatomic, weak) id <AMPersonDelagate> delegate; //与B能够沟通的渠道- (void)findOffer;   //A 自身应该具备的能力, 工作的能力,  对房子的能力, 处对象的能力 等等  ==.@end

A的实现部分

#import "AMPerson.h"@implementation AMPerson  // 实现寻找代理人B 去帮忙完成的操作, 协议已经规范了, 代理人B的能力,所以可以放心委托B去完成A的需求- (void)findOffer{       NSLog(@"%@", self.name);        if([self.delegate respondsToSelector: @selector(personFindOffer:)]){        [self.delegate personFindOffer: self];  //通过与B的沟通渠道, 让B 去完成服务    }}@end

对象B

#import "AMPerson.h"@interface AMFindOffer : NSObject <AMPersonDelagate>  //作为A的委托人, 要能给A提供服务,就必须 遵守A的协议规定@end

B的实现

@implementation AMFindOffer/*遵守了A的规定过, 然后帮A 去具体实施 方案*/- (void) personFindOffer:(AMPerson *)person{    NSLog(@"@联系猎头,递交委托人简历....");    NSLog(@"@找到工作了!");}@end


#import <Foundation/Foundation.h>#import "AMPerson.h"#import "AMFindOffer.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        AMFindOffer * B = [[AMFindOffer alloc] init];        AMPerson * A = [[AMPerson alloc] init];                A.name = @"zhang san";        A.delegate = B;  //取得与代理B的沟通关系                [A findOffer];  //A发出找工作的需求, 具体怎么找, 交给B去完成            }    return 0;}


在A中要定义一个协议,去规范代理B 应该实现的内容,  协议中的方法可以用 @optional 前缀 说明该方法在实现方面是可选的, 即代理B 可以只具备几个服务, 也可以是仅提供一个服务.

要获得 代理实现的内容, 首先应该具备使用这项内容的能力,即 A本身应该具备一个需求该内容的方法,通过这个方法,去与B沟通,并让B 去完成任务

在B中首先一定要遵守A的协议 , 然后再去实现 应该完成的内容方案...


其实我们也可以通过另一种方式完成上面的操作,只不过 ,不够通用, 不够独立,不够灵活.

我们可以在A中定义一个B类的指针. 在获得了B类后,就可以完成需要的操作.

==============================


3.前面学习中遇到的小问题, 都记录在这里吧

1.当要放大按钮中的图片时候,我们动态修改图片的frame,但图片可能会因为IOS自动布局的原因, 图片不能实现放大, 我们需要修改控制器下的Use Auto Layout属性.

2.  当我们不想让按钮中的图片显示高亮效果的时候 修改 Highlighted Adjusts Image 属性

3. 控件显示顺序问题. (把遮盖层置于放大图片的上面, 不然是最顶层的,)   bringSubviewToFront:  这个函数去完成把某个控件放到 父控件的最顶层

4.    [coverView addTarget: self action:@selector(smallImageClick) forControlEvents: UIControlEventTouchUpInside];  为某个控件上的动作注册触发方法

为covervView 控件 上的 点击事件 注册一个samllImageClick方法.

addTarget 参数是smallimageClick方法的对象,   即触发方法的对象.


5.   [self.iconView setImage: [UIImage imageNamed:question.icon] forState: UIControlStateNormal];  对按钮上图片的设置不能直接用  bu.imageview.image

因为按钮是区分状态的, 必须根据状态去设置,  必须使用这个函数,不然 会出现混乱.....


6.


AppIcon是程序的图标, LaunchImage是程序的启动动画背景

在设置启动图的时候,一定要先把其他图片资源添加好后,在这里设置


===================================



0 0
原创粉丝点击