[IOS笔记]UIScrollView代理——自己代理和任何oc对象

本文介绍如何在iOS应用中使用UIScrollView的代理方法实现滚动视图的各种交互效果,并演示如何将任意OC对象设为代理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1自己代理

//
//  ViewController.m
//  UIScrollView代理delegate
//
//  Created by cdj on 17/9/10.
//  Copyright © 2017年 ue. All rights reserved.
//

#import "ViewController.h"

@interface ViewController () <UIScrollViewDelegate> //必须遵守代理协议


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UIScrollView * scrollView = [[UIScrollView alloc] init];
    scrollView.backgroundColor = [UIColor redColor];
    scrollView.frame = CGRectMake(0, 20, 300, 200);
    [self.view addSubview:scrollView];
    
//    注意:通过代码创建scrollView时,一开始subViews这个数组为nil
//    NSLog(@"%@", scrollView.subviews);
    UIImage *image = [UIImage imageNamed:@"minion"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    
    [scrollView addSubview:imageView];
     scrollView.contentSize = image.size;
    
//     NSLog(@"-----%@", scrollView.subviews);
//    3设置代理
    scrollView.delegate = self;
}

/**
 *  当scrollView滚动时自动调用
 *
 *  @param scrollView <#scrollView description#>
 */
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    NSLog(@"2222scrollViewDidScroll");
}
/**
 *  用户即将开始拖拽
 *
 *  @param scrollView <#scrollView description#>
 */
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{

    NSLog(@"11111scrollViewWillBeginDragging");
}
/**
 *  即将停止时调用
 *
 *  @param scrollView          <#scrollView description#>
 *  @param velocity            <#velocity description#>
 *  @param targetContentOffset <#targetContentOffset description#>
 */
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
    NSLog(@"3333scrollViewWillEndDragging");
}

/**
 *  停止时跳用
 *
 *  @param scrollView <#scrollView description#>
 *  @param decelerate <#decelerate description#>
 */
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    NSLog(@"4444scrollViewDidEndDragging");
    if (decelerate == NO) {
        NSLog(@"用户已经停止拖拽");
    }else{
        NSLog(@"用户意见停止拖拽,但由于惯性还在继续减速滚动");
    }
}
/**
 *  减速完毕,停止滚动
 *
 *  @param scrollView <#scrollView description#>
 */
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    NSLog(@"555scrollViewDidEndDecelerating 减速完毕,停止滚动");
}

@end



2任何oc对象都可以作为scrollView的代理

//
//  ViewController.m
//  UIScrollView代理delegate
//
//  Created by cdj on 17/9/10.
//  Copyright © 2017年 ue. All rights reserved.
//

#import "ViewController.h"
#import "UECar.h"

@interface ViewController () <UIScrollViewDelegate> //必须遵守代理协议

@property (nonatomic, strong) UECar *car;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UIScrollView * scrollView = [[UIScrollView alloc] init];
    scrollView.backgroundColor = [UIColor redColor];
    scrollView.frame = CGRectMake(0, 20, 300, 200);
    [self.view addSubview:scrollView];
    
//    注意:通过代码创建scrollView时,一开始subViews这个数组为nil
//    NSLog(@"%@", scrollView.subviews);
    UIImage *image = [UIImage imageNamed:@"minion"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    
    [scrollView addSubview:imageView];
     scrollView.contentSize = image.size;
    
//     NSLog(@"-----%@", scrollView.subviews);
//    3设置代理:1任何oc对象都可以作为scrollView的代理 2苹果设计的代理属性是weak?
    self.car = [[UECar alloc] init];
    scrollView.delegate = self.car;

}




@end

//
//  UECar.h
//  UIScrollView代理delegate
//
//  Created by cdj on 17/9/10.
//  Copyright © 2017年 ue. All rights reserved.
//

//#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface UECar : NSObject <UIScrollViewDelegate>

@end

//
//  UECar.m
//  UIScrollView代理delegate
//
//  Created by cdj on 17/9/10.
//  Copyright © 2017年 ue. All rights reserved.
//

#import "UECar.h"

@interface UECar ()

@end

@implementation UECar 


-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    NSLog(@"scrollViewDidScroll 滑动了");
}

-(void)dealloc{
    NSLog(@"UECar 销毁了");
}



@end








































































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值