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

在学习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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值