0818-ScrollView(控件属性设置)(控件代理为控制器)(TextField限制用户输入长度)(TextField让代理控制器 接收return 让控制器执行模拟点击登录)(UIScrol...

0818-ScrollView

-------

控件属性设置

@property (nonatomic,getter = isEnabled) BOOL enabled

enabled selected highlighted

控件内容的水平 垂直居中

contentVerticalAlignment     contentHorizontalAlignment

btn removeTarget

------

控件代理为控制器  (用来和视图交互的 有的控件不能添加监听方法的时候用代理来完成对控件的监听等  或者纯粹是控件想完成某些事情)

(控件把事情给代理delegate 代理做完事情把 返回值交给控件)

步骤:

1、TextField控件 设置代理给ViewController (拖线或者代码设置)

2、控制器遵守 TextField控件定义的协议

3、控制器实现协议中定义的方法

#import "ViewController.h"

@interface ViewController () <UITextFieldDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}


- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    
//    NSLog(@"%@ %@",NSStringFromRange(range),string);
    return (range.location<6);
    return YES;
}

@end

 ------------

TextField限制用户输入长度

(代理为控制器)

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    
//    NSLog(@"%@ %@",NSStringFromRange(range),string);
    return (range.location<6);
    return YES;
}

------------

TextField让代理控制器 接收return  让控制器执行模拟点击登录

1、勾选placeHolder   请输入用户名

2、登录框暗文 勾选secure

3、连线控制器成为代理 连线登录方法login

4、self.textfield22 becomeFistResponder

5、[self login];

6、勾选clear button  appers while editing

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    if (textField == self.username) {
        [self.password becomeFirstResponder];
    }else if(textField == self.password){
        [self login];
        [self.password resignFirstResponder];
    }
    
    return YES;
}

----------------

UIScrollView - 小黄人

方式1:

勾选自动布局的情况下 4寸屏幕的scrollView大小

1、代码创建scrollView 并添加UIImageView 并设置UIImageVeiw.image

3、UIImageView的image属性 宽高设置为892 632

3、self.scrollView.contentSize = CGSizeMake(892,632); //这个设定滚动区域 才能滚动

 4   self.scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);

4、[self.imageView sizeTofit]  根据子空间image大小决定自己大小  (相框根据相册来决定自己大小)

6、不显示滚动时候的滚动条 self.scrollView.showHorizontalScrollIndicator = NO;  self.scrollView.showVerticalScrollIndicator = NO;

7、scrollView的内容大小版面移动 偏移位置 self.scrollView.contentOffSet = CGPointMake(100,100);

8、取消动画弹簧效果 self.scrollView.bounces = NO;(超出contentsize部分不会显示 动画弹簧了)

5、给scrollView添加上下约束为0    防止3.5寸屏幕拖到底部的时候需要再拖一点才能看到 图片下面的一部分

 导致这个问题的原因是 因为scrollView没有添加约束的storyboard中scrollView高度 如果过大 超出了3.5寸屏幕一部分   所以导致该问题出现

 

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

@property (nonatomic,strong) UIImageView *imageView;
@property (nonatomic,strong) UIImage *image;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 创建视图
    self.imageView.image = self.image;
    [self.imageView sizeToFit];//根据子空间的内容调整 imageView的尺寸
    
    self.scrollView.contentSize = self.image.size;
    self.scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);
    self.scrollView.showsHorizontalScrollIndicator = NO;
    self.scrollView.showsVerticalScrollIndicator = NO;
    self.scrollView.contentOffset = CGPointMake(100, 100);
    self.scrollView.bounces = NO;
    [self.scrollView addSubview:self.imageView];
    
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];
    btn.center = self.view.center;
    [self.view addSubview:btn];
    [btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
}
- (void)click
{
    CGPoint p = self.scrollView.contentOffset;
    p.x +=20;
    p.y +=20;
    self.scrollView.contentOffset = p;
}

- (UIImage *)image
{
    if (_image == nil) {
        _image = [UIImage imageNamed:@"minion"];
    }
    return _image;
}

- (UIImageView *)imageView
{
    if (_imageView == nil) {
        _imageView = [[UIImageView alloc] init];
    }
    return _imageView;
    
}

 

方式2 通过storyboard拖动 UIImageView到UIScrollView里面 需要取消自动布局     

这个注意就可以了默认都不用管的 UIScrollView控件属性  ContentSize ScrollEnabled(默认YES) userInteractionEnabled(默认YES)

----------------

scrollView - 喜马拉雅(滚动界面布局)

具有穿透效果

1、拖控件 ,拖动navigation bar 和 tabbar的时候保持和scrollView在同一层次  并代码调整这2个控件的上下位置

2、navigation bar放在和scrollView同一层    (不能放到scrollView里了 否则就被一起随着拖动被拖走了)

3、重写scrollView属性set方法 -(void)setScrollView22:(UIScrollView *)scrollView{} 

storyboard 做scrollView22连线 一定会被加载并执行了 -(void)setScrollView22:(UIScrollView *)scrollView{}方法   storyboard生成的xml文件被加载并将相关对象生成  

在viewDidLoad方法前执行  所以有人喜欢直接在这里写程序代码 而不在viewDidLoad里

----------

scrollView 小黄人 放大缩小

scrollView添加代理来监听放大 控制器实现突破放大

1、scrollView添加代理控制器

2、控制器实现代理协议方法 @interface ViewController ()<UIScrollViewDelegate>

 - (UIView *)viewForZoomInScrollView:(UIScrollView)scrollView

{

return self.imageView;

}

viewDidLoad里增加:

self.scrollView.maxiumZoomScale = 2.0;

self.scrollView.miniumZoomScale = 0.2;

 还有放大开始 放大结束等协议方法 用的很少

3、按住option  鼠标箭头拖动放大缩小

id<UIScrollViewDelegate>这个协议指定任何对象 都可以当它的代理

--------------

倒计时 4寸屏设计界面

1、拖动空间navigation bar   ,里放入一个bar button item ,小控件identifier属性设为stop

1、拖控件 toolbar 中可以放几个 bar button item   放到底部

2、设置控件的属性图标 identifier 为play pause 等

3、弹簧控件(Flexible bar button item)把2个item bar撑开

 4、底部tab bar 下面约束为0  (防止3.5寸屏幕不显示tool bar)

5、NSTimer 时间添加到运行循环  

#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *numberLabel;
@property (nonatomic,strong) NSTimer *timer;

@end

@implementation ViewController

- (IBAction)play {

    self.numberLabel.text = @"10";
    self.timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updateNumber) userInfo:nil repeats:YES];
    //添加到运行循环
    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

}

- (void)updateNumber{
    
    int number = self.numberLabel.text.intValue;

    if (--number==0) {
        [self pause];
    }else{
        self.numberLabel.text = [NSString stringWithFormat:@"%d",number];
        
    }
}
- (IBAction)pause
{
    [self.timer invalidate];
}

@end

消除滚动干扰定时器 采用NSRunLoopCommonModes

 

或者 NSTimer scheduledTimerWithTimeInterval

//    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTimer:) userInfo:@"hello timer" repeats:YES];
    [timer show];
- (void)updateTimer{}

NSDefaultRunLoopMode 当滚动出现的时候 timer失效

6、时间到了弹出提示 UIAlertView

7、UIAlertView代理实现 点击了哪个弹出按钮

CADisplayLink更加准确   每秒60此

-------------

scrollView - 图片轮播器

1、设定scrollView宽高为 300 130

2、CGSizeMake(_scrollView.bounds.size.width, 0); //高度不设置即可

4、_scrollView.contentSize = CGSizeMake(_scrollView.bounds.size.width * kImageCount, 0);

3、self.pageControl.currentPage = 0;//初始化控件

5、_scrollView.pagingEnabled = YES;// 拖一半办成一个图片效果

6、[self.scrollView setContentOffset:CGPointMake(x, 0) animated:YES];

7、

 

        CGSize size = [_pageControl sizeForNumberOfPages:kImageCount]; //根据总页数得到尺寸
        //设置frame
        _pageControl.center = CGPointMake(self.view.center.x, 130); _pageControl.bounds = CGRectMake(0, 0, size.width, size.height);
 
 

8、完整代码:

 
 

 

 

 

#import "ViewController.h"
#define kImageCount 5

@interface ViewController () <UIScrollViewDelegate>
@property (nonatomic,strong)UIScrollView *scrollView;
@property (nonatomic,strong)UIPageControl *pageControl;
@property (nonatomic,strong)NSTimer *timer;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    for (int i= 0; i<kImageCount; i++) {
        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"img_%02d",i+1]];
        UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.scrollView.bounds];
        imageView.image = image;
        [self.scrollView addSubview:imageView];
    }
 
    //计算imageView的位置
    [_scrollView.subviews enumerateObjectsUsingBlock:^(UIImageView *imageView, NSUInteger idx, BOOL *stop) {
        CGRect frame = imageView.frame;
        frame.origin.x = idx*frame.size.width;
        imageView.frame = frame;
    }];
    
    //分页控件显示
    self.pageControl.currentPage = 0;
    [self startTimer];
}

- (void)startTimer
{
    self.timer = [NSTimer timerWithTimeInterval:2.0f target:self selector:@selector(updateImageView) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
- (void)updateImageView
{
    //当前的page
    int page = (self.pageControl.currentPage + 1) % kImageCount;
    self.pageControl.currentPage = page;
    [self pageChanged:self.pageControl];
}
- (UIPageControl *)pageControl
{
    if (_pageControl == nil) {
        _pageControl = [[UIPageControl alloc] init];
        _pageControl.numberOfPages = kImageCount;//总页数
        
        CGSize size = [_pageControl sizeForNumberOfPages:kImageCount]; //根据总页数得到尺寸
        //设置frame
        _pageControl.center = CGPointMake(self.view.center.x, 130);
        _pageControl.bounds = CGRectMake(0, 0, size.width, size.height);
        //设置颜色
        _pageControl.pageIndicatorTintColor = [UIColor yellowColor];
        _pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
        
        [self.view addSubview:_pageControl];
        //添加监听方法
        [_pageControl addTarget:self action:@selector(pageChanged:) forControlEvents:UIControlEventValueChanged];
        
    }
    return _pageControl;
}
//小点变 图像滚动
- (void)pageChanged:(UIPageControl *)pageControl
{
    CGFloat x = pageControl.currentPage * self.scrollView.bounds.size.width;
    [self.scrollView setContentOffset:CGPointMake(x, 0) animated:YES];
    
}
- (UIScrollView *)scrollView
{
    if (_scrollView == nil) {
        // 初始化scrollView
        _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(10, 20, 300, 130)];
        _scrollView.backgroundColor = [UIColor redColor];
        [self.view addSubview:_scrollView];
        
        _scrollView.bounces = NO;
        _scrollView.showsHorizontalScrollIndicator = NO;
        _scrollView.showsVerticalScrollIndicator = NO;
        
        _scrollView.pagingEnabled = YES;// 拖一半办成一个图片效果
        _scrollView.contentSize = CGSizeMake(_scrollView.bounds.size.width * kImageCount, 0);
        
        _scrollView.delegate = self;
    }
    return _scrollView;
}
//停下来就修改pageControl的小点位置
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    CGPoint point = scrollView.contentOffset;
    int page = point.x/scrollView.bounds.size.width;
    self.pageControl.currentPage = page;}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    NSLog(@"%s",__func__);
    [self startTimer];
}
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [self.timer invalidate];
}

@end

 

----------------

NSStringFromCGRect  NSStringFrom结构体类型 NSStringFromRange

结构体定义

    typedef struct Abbb{
        int a;
        int b;
    }ccc;
    struct Abbb tt;
    tt.b = 1;

------------------

其他不重要的

 

转载于:https://www.cnblogs.com/zff193/p/5214279.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值