先看图片

这里是NSScrollView配合其他控件使用,我们这里只讲NSScrollView。

复制以下代码即可以运行

  1. @interface ViewControl ()
  2.  
  3. /** 滚动显示 */
  4. @property (nonatomic, strong) NSScrollView *scrollView;
  5.  
  6. @end
  7.  
  8. @implementation ViewControl
  9. #pragma mark - 懒加载
  10. - (NSScrollView*)scrollView{
  11. if(!_scrollView){
  12. _scrollView = [[NSScrollView alloc]init];
  13. [self.view addSubview:self.scrollView];
  14. [_scrollView setBorderType:NSNoBorder];
  15.  
  16. _scrollView.hasHorizontalScroller = true;//水平滚动
  17. _scrollView.hasVerticalScroller = false;//禁止垂直滚动
  18.  
  19. _scrollView.horizontalScrollElasticity = NSScrollElasticityAllowed; //水平的弹性属性
  20. _scrollView.verticalScrollElasticity = NSScrollElasticityNone; //垂直的弹性属性
  21.  
  22. [_scrollView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];//自适应出现或隐藏滑动条
  23.  
  24. }
  25. return _scrollView;
  26. }
  27.  
  28. - (void)viewDidLoad {
  29. [super viewDidLoad];
  30. // Do view setup here.
  31. [self setLocationScrollView];//设定滑动位置,这里可以用NSButton的点击事件或其他控件的触发事件来设定
  32.  
  33. [self layoutSubViews];//设置UI
  34. //监听滑动位置
  35. [[self.scrollView contentView] setPostsBoundsChangedNotifications: YES];//发起通知
  36. //找个合适的地儿,注册通知
  37. NSNotificationCenter *center = [NSNotificationCenter defaultCenter] ;
  38. [center addObserver: self
  39. selector: @selector(boundsDidChangeNotification:)
  40. name: NSViewBoundsDidChangeNotification
  41. object: [self.scrollView contentView]];
  42.  
  43. }
  44.  
  45. #pragma mark -UI布局
  46. - (void)layoutSubViews{
  47. self.scrollView.frame = CGRectMake(100,100,200,44);//位置,或者用下面的
  48. //7.左右滚动条
  49. [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
  50. make.top.offset(30);
  51. make.left.offset(5);
  52. make.width.equalTo(ws.mas_width).offset(-10);
  53. make.height.equalTo(ws.mas_height).offset(-35);
  54. }];
  55.  
  56. }
  57.  
  58. #pragma mark - 监听滚动条事件
  59. - (void) boundsDidChangeNotification: (NSNotification *) notification{
  60. // 在这里进行处理
  61. NSClipView *changedContentView = [notification object];
  62.  
  63. // get the origin of the NSClipView of the scroll view that
  64. // we're watching
  65.  
  66. NSPoint changedBoundsOrigin = [changedContentView documentVisibleRect].origin;
  67. //判断滚动条移动高度变化确认是否移动拉动滚动到底
  68. NSLog(@"滑动了:%f",changedBoundsOrigin.y);
  69. if (changedBoundsOrigin.y > 560) {
  70. // self.argeeButton.enabled = YES;
  71. }else{
  72. // self.argeeButton.enabled = NO;
  73. }
  74.  
  75. }
  76.  
  77. #pragma mark 设定滑动条位置
  78. -(voidsetLocationScrollView{
  79.  
  80. float ScrollLocation = 0.0;//往右偏移量
  81. float MaxScroll = 0.0;//往右最大偏移量
  82.  
  83. [[_collectionView enclosingScrollView] setLineScroll:0.0f];//NSView的enclosingScrollView属性可以获得视图的滚动条,如果视图没有滚动条则enclosingScrollView为nil。
  84.  
  85. [[_collectionView enclosingScrollView] setPageScroll:0.0f];//NSView的enclosingScrollView属性可以获得视图的滚动条,如果视图没有滚动条则enclosingScrollView为nil。
  86.  
  87. ScrollLocation = [[[_collectionView enclosingScrollView] contentView] bounds].origin.y;
  88.  
  89. MaxScroll = [[[_collectionView enclosingScrollView] documentView] bounds].size.height - [[_collectionView enclosingScrollView] documentVisibleRect].size.height;
  90.  
  91. ScrollLocation += 100;
  92.  
  93. if(ScrollLocation < 0)
  94.  
  95. {
  96.  
  97. ScrollLocation = 0;
  98.  
  99. }
  100.  
  101. else if(ScrollLocation > MaxScroll)
  102.  
  103. {
  104.  
  105. ScrollLocation = MaxScroll;
  106.  
  107. }
  108.  
  109. [_collectionView scrollPoint:NSMakePoint(ScrollLocation, 0)];//此处才是最为关键直接触发偏移量,_collectionView是处于self.scrollView上面的控件。
  1. }

按钮自己添加。触发

  1. [_collectionView scrollPoint:NSMakePoint(ScrollLocation, 0)];//此处才是最为关键直接触发偏移量,_collectionView是处于self.scrollView上面的控件。

这句就可以完成偏移量。

macOS NSScrollView简单使用的更多相关文章

  1. MacOS SVN简单入门

    背景:MacOS内置了SVN的客户端和服务器端的软件,下边所使用到的目录需要结合自己电脑的具体情况进行设置,并不是很困难. MacOS SVN简单入门 第一部分,创建本地的SVN测试仓库,并修改相应的 ...

  2. macos下简单的socket服务器+客户端

    TCP客户端服务器编程模型: 服务器: 调用socket函数创建套接字 调用bind绑定本地IP和端口 调用listen启动监听(准备好接收客户端链接的队列) 调用accept从已连接队列中提取第一个 ...

  3. 免费版对象存储【minIO】CentOS部署实践记录 2021

    好久没写,记录一下 1.背景 之前一直用的七牛,不过是收费的,然后有些定制化需求,可能比较看重预算,然后就有了这篇开源方式:minio 2.简介 官方文档:http://docs.minio.org. ...

  4. MacOS下对postgresql的简单管理操作

    如何安装在另一篇blog中有述,这里不再赘述.本篇简单说一下安装完postgresql之后的一些管理和查询操作. 首先安装完postgresql之后需要初始化数据库: initdb /usr/loca ...

  5. [macOS开发.NET Core] 一个简单的WEB程序

    上一篇咱们提到了在macOS下选进行开发. 咱们已经把工具准备完成了. 现在咱们做一个简单的DEMO 创建WEB程序  之前咱们已经创建过WEB程序,并且成功的运行过数据 现在咱们创建一个页面,并显 ...

  6. MongoDB在MacOS上的客户端Robo 3T 的简单使用(二)

    最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. 本篇文章只做简单介绍,能够使用起来 ...

  7. MacOS系统下简单安装以及配置MongoDB数据库(一)

    最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. 项目一共四部分: 1.MacOS下 ...

  8. ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新建项目 - macOS 环境 对于任何语言和 ...

  9. ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计.本章节我 ...

  10. 分享CCNTFS小工具,在 macOS 中完全读写、修改、访问Windows NTFS硬盘的文件,无须额外的驱动(原生驱动)更稳定,简单设置即可高速传输外接NTFS硬盘文件

    CCNTFS [ 下载 ] 在 macOS 中完全读写.修改.访问Windows NTFS硬盘的文件,无须额外的驱动(原生驱动)更稳定,安装后进行简单设置即可高速传输外接NTFS硬盘文件,可全程离线使 ...

随机推荐

  1. 代码随想录算法训练营day13

    基础知识 二叉树基础知识 二叉树多考察完全二叉树.满二叉树,可以分为链式存储和数组存储,父子兄弟访问方式也有所不同,遍历也分为了前中后序遍历和层次遍历 Java定义 public class Tree ...

  2. .netcore全局异常处理

    一.背景 某天,应用程序进程无缘无故退出,也就是我们通常说的崩溃.通常情况下,windows事件会记录一条消息.但是有时候,我们发现这样的信息,对于查找问题,还是远远不够的,因为它说RunTime报错 ...

  3. JavaScript表单form

    form表单实例 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"& ...

  4. pip 基本问题

    pip语法错误 pip换源 更新错误 无模板 Ignoring警告 问题一 (pip语法错误 ) pip list File "<stdin>", line 1 pip ...

  5. 一文总结Vue

    一.创建项目 1.安装Node.js 查看node版本 node-v 查看npm版本 npm-v 2.安装vue-cli脚手架 安装 npm install -g @vue/cli 创建项目 vue ...

  6. ubuntu docker pull 失败 Error response from daemon: Get https://registry-1.docker.io/v2/

    问题: ubuntu@VM-3-4-ubuntu:~$ docker pull tensorflow/tensorflow:2.3.4-gpuError response from daemon: G ...

  7. 时间序列分析 2.X 单位根检验

    单位根检验 (基于模型检验序列是否平稳) 趋势平稳序列 \(X_{t}=\beta_{0}+\beta_{1} t+Y_{t}\) \(Y_t\) 为平稳序列, 则称 \(X_t\) 为趋势平稳序列 ...

  8. git 的提交与合并

    1,创建远程仓库   不论是用命令行还是码云之类的都可以 2,git clone url   这是将远程仓库库提交到本地 3, git checkout -b dev   创建dev分支并切换到dev ...

  9. 【Java SpringBoot】RestTemplate使用postForObject发送请求,接收String类型的response时中文乱码

    https://blog.csdn.net/qq_43758789/article/details/120576717 使用RestTemplate发送PostForObject的时候会出现乱码.这是 ...

  10. CF14D题解

    CF14D Two Paths题解 题目链接 传送门 题意简述 给定一棵树,找出两条不经过相同点的最长路径,使得他们的长度乘积最大. 题目分析 首先,如果在一棵树上,两条路径没有共同的点,那么这两条路 ...