UI学习——UIScrollView(滚动视图)

这篇具有很好参考价值的文章主要介绍了UI学习——UIScrollView(滚动视图)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、基本概念

UIScrollView可以用来展示超出屏幕大小的内容,并且可以通过手势来滚动显示这些内容。

二、基本用法

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //定义并创建一个滚动视图
    //可以对视图内容进行滚屏查看功能
    UIScrollView* sv= [[UIScrollView alloc] init];
    //设置滚动视图的位置,使用矩形来定位视图位置,它决定了滚动视图的显示窗口
    sv.frame = CGRectMake(0, 0, 394, 852);
    //是否按照整页来滚动视图
    sv.pagingEnabled = YES;
    //是否开启滚动效果
    sv.scrollEnabled = YES;
    //设置画布的大小,画布显示在滚动视图内部,一般大于Frame的大小,这里是横向滚动所以有几张图就用宽度乘以几,如果是纵向滚动就用高度去乘
    sv.contentSize = CGSizeMake(394 * 3, 852);
    //是否可以边缘弹动效果
    sv.bounces = YES;
    //开启横向弹动效果
    sv.alwaysBounceHorizontal = YES;
    //开启纵向弹动效果
    sv.alwaysBounceVertical = YES;
    //是否显示横向滚动条,其显示条件是画布横向大小大于滚动视图横向位置大小
    sv.showsHorizontalScrollIndicator = YES;
    //是否显示纵向滚动条,其显示条件是画布纵向大小大于滚动视图纵向位置大小,有时系统会默认不显示纵向滚动条
    sv.showsVerticalScrollIndicator = YES;
    //设置背景颜色
    sv.backgroundColor = [UIColor yellowColor];
    [self.view addSubview: sv];
    //使用循环创建3张图片视图
    for (int i = 0; i < 3; i++) {
        NSString* str = [NSString stringWithFormat:@"%d.jpg", i + 1];
        UIImage* image = [UIImage imageNamed:str];
        UIImageView* iView = [[UIImageView alloc] initWithImage:image];
        iView.frame = CGRectMake(394 * i, 0, 394, 852);
        [sv addSubview:iView];
    }
}


@end

需要注意的是CGRectMake和CGSizeMake的参数根据实际情况来设置,我使用iPhone14pro模拟运行,所以参数中的宽度为394,高度为852。

运行结果如下:
uiscrollview,ui,学习
uiscrollview,ui,学习

uiscrollview,ui,学习

三、UIScrollViewDelegate协议

我们跳转到UIScrollViewDelegate协议可看到如下方法:
uiscrollview,ui,学习
下面我们实现几个协议中的方法。
首先在viewController的接口部分遵循UIScrollViewDelegate协议,并定义一个滚动视图成员变量。

#import <UIKit/UIKit.h>
//当前视图控制器要实现协议函数
@interface ViewController : UIViewController<UIScrollViewDelegate>
{
    //定义一个滚动视图成员变量
    UIScrollView* _scrollview;
}
@end

接着我们在实现部分完成这些方法。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    UIScrollView* _scrollview = [[UIScrollView alloc] init];
    _scrollview.frame = CGRectMake(0, 0, 394, 852);
    _scrollview.scrollEnabled = YES;
    _scrollview.pagingEnabled = NO;
    _scrollview.contentSize = CGSizeMake(394, 852 * 3);
    _scrollview.bounces = YES;
    _scrollview.alwaysBounceHorizontal = NO;
    _scrollview.alwaysBounceVertical = YES;
    _scrollview.backgroundColor = [UIColor whiteColor];
    for (int i = 0; i < 3; i++) {
        NSString* str = [NSString stringWithFormat:@"%d.jpg", i + 1];
        UIImage* image = [UIImage imageNamed:str];
        UIImageView* iView = [[UIImageView alloc] initWithImage:image];
        iView.frame = CGRectMake(0, 852 * i, 394, 852);
        [_scrollview addSubview:iView];
    }
    [self.view addSubview:_scrollview];
    //滚动视图画布的移动位置,偏移位置
    //功能:决定画布显示的最终图像结果
    _scrollview.contentOffset = CGPointMake(0, 0);
    //将当前视图控制器作为代理对象
    _scrollview.delegate = self;
}
//当滚动视图移动时,只要offset坐标发生变化,都会调用此函数
//参数:调用此协议的滚动视图对象
//可以使用此函数监控滚动视图的位置
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    NSLog(@"y = %f", scrollView.contentOffset.y);
}
//当滚动视图已经结束时调用此函数
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView {
    NSLog(@"Did End Drag!");
}
//滚动视图即将开始被拖动时调用此函数
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    NSLog(@"WillBeginDrag!");
}
//当滚动视图即将结束时调用此函数
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    NSLog(@"Will end drag!");
}
//视图即将减速时调用
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
    NSLog(@"will Begin Decelerating");
}
//视图已经结束减速时调用,视图停止的瞬间调用
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    NSLog(@"视图停止移动!");
}
@end

运行结果如下:
uiscrollview,ui,学习
当我们按住屏幕并滑动然后再松开时
uiscrollview,ui,学习
可以看到控制台打印了WillBeginDrag!和Will end drag!

当我们按住屏幕并快速滑动然后再松开时uiscrollview,ui,学习
uiscrollview,ui,学习
uiscrollview,ui,学习
可以看到控制台打印了WillBeginDrag!和Will end drag!和will Begin Decelerating和视图停止移动!

如果想点击屏幕跳转到指定位置可以使用如下函数:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    //让滚动视图移动到指定位置,动画移动
    [_scrollview scrollRectToVisible:CGRectMake(0, 0, 394, 852) animated:YES];
}

总结

以上就是本篇文章的全部内容。文章来源地址https://www.toymoban.com/news/detail-694775.html

到了这里,关于UI学习——UIScrollView(滚动视图)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用element-ui的滚动条

    在项目中引入element-ui后,发现在不同的浏览器显示并不一样,为了统一浏览器中的样式,统一使用了element-ui库中的滚动条。使用方法如下: 1.把想要出滚动条的内容放在下边标签里即可: 2.如果不想要横向的滚动条,添加css: 3.如果相让滚动条一直显示而不是鼠标移入才显

    2024年02月15日
    浏览(35)
  • Element UI Dialog 对话框改成固定高度,超出部分滚动条滚动

    elememt ui 中的el-dialog对话框如果 内容过多高度会被无限拉长 。要将其设置成固定高度,此处我设置的是 页面总高度的70% ,内容过多时在对话框内出现 滚动条 。但是这样设置会造成高度不能根据内容自适应,始终是70%。可以有两种方法实现: 方法二 : 主要是运用element ui 中

    2024年02月12日
    浏览(30)
  • element ui textarea文本域显示滚动条

    测试报的一个小bug,在这做个记录 效果图: 加之前:鼠标放上去才会显示  加之后:超过直接显示出来  代码:

    2024年02月11日
    浏览(30)
  • 《Jetpack Compose从入门到实战》第三章 定制 UI 视图

    -ui.theme.Color.kt ui.theme.Type.kt 先将Nunito Sans字体家族放入 res/font,再根据设计稿写代码 ui.theme/Shape.kt CompositionLocal 是 Jetpack Compose 中的一种数据传递方式。它可以在组合组件之间传递可变数据,而无需通过 props 或 state 管理器来传递数据。这个特性比传统的数据传递方式更为高效

    2024年02月07日
    浏览(31)
  • element-ui table 设置表格滚动条位置

    场景: 在切换不同页面时(被 keep-alive 缓存的组件间切换),页面中的element-ui table的滚动条位置没有停留在原来的位置。目前需要切换不同的页面返回来后,滚动条保持在原来的位置。 代码:

    2024年02月11日
    浏览(43)
  • vue+element-ui 实现下拉框滚动加载

    该功能是由 自定义滚动指令 结合下拉框 :remote-method 远程搜索 实现的 开启远程搜索 参考官方文档 绑定自定义指令 v-el-select-loadmore=“loadmore”

    2024年02月14日
    浏览(46)
  • element-ui select下拉框滚动加载更多

    当下拉框数据过多时,加载会非常慢,所以使用分页去显示,通过监听滚动事件来达到分页效果。 我是使用Vue自定义指令来做的。 一、首先在src下创建一个js文件,完成自定义指令的编写 有没有大神告诉我,自定义指令为啥在同一个页面不能使用多次? 二、在main.js中引入进来

    2024年02月16日
    浏览(37)
  • vue3 使用UI框架reactive数据更新,视图不更新问题

    本篇主要记录两个问题,然而这两个问题又都可以对应同一种解法。废话少说,解决方法在最上面。推荐格式如下: 一定一定要再多包一层,不然就会遇到一些问题。(⊙﹏⊙)虽然这是一句废话。下面的内容过于基础且本篇只记录bug和解法,想要探求为什么的呢,还请自己去

    2024年02月12日
    浏览(26)
  • 新功能: 全新的UI视图、搜索设置和强大的API特性

    我们在ftrack Studio中引入的一些超赞的新功能,旨在将用户体验提升到一个新的水平!准备好提高生产效率、优化任务流程,并获得有价值的见解,以便为你的所有项目做出数据驱动的决策。 本月,我们为ftrack Studio带来了几个新功能,使你的创意项目管理体验更加流畅、直观

    2024年02月16日
    浏览(27)
  • element-ui table表格 增加合计行 和 表格列固定之后 滚动条无法滚动

    是因为el-table__fixed或el-table__fixed-right有了合计之后把 el-table__body-wrapper层覆盖 el-table__fixed或el-table__fixed-right层级较高 因此点击滚动条失效 解决方法: 若想设置滚动条样式 若想合并合计行的列

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包