macOS开发之视图和滚动视图

视图是控件的基础,本章介绍坐标系统,视图层级管理,绘制方法,事件响应基本概念;滚动条如何管理大范围视图。

NSView

  • 我们做iOS的都知道UIView,差不多,但是macos的视图坐标系,左下角是(0,0)
  • 如果想转换为和iOS的一样,覆盖视图的isFlipped方法 -(bool)isFlipped {return true;}
  • frame & bounds这个老生常谈的问题在iOS移动开发中都知道,这里不做介绍
  • 坐标转化和iOS的基本一样,convertPoint等方法实现
  • viewWithTag和iOS的一样
  • autosize布局就不说了,现在都是用autoLayout了
  • layer和iOS有点不一样,就是需要设置self.wantsLayer = true 才有layer
  • 视图绘制和截图以及事件响应我们通过实例来讲解
  • 滚动视图控制大视图的滚动,原理就是通过NSClipView视图的bounds坐标的变化来实现滚动
  • 滚动视图的实例教程请看视频

滚动视图

当视图size大于父视图size时,使用NSScrollView来控制显示
大家玩手机的时候,阅读文章上下滚动,其本质就是NSScrollView来做的
NSScrollView的内容视图是NSClipView,旁边的进度条是NSScroller
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-amExZO6O-1583682227794)(media/15824585974819/15836666903506.jpg)]

NSScrollView就是通过NSClipView视图bounds的x或y坐标变化来实现水平或上下滚动的

如何代码创建滚动视图

    func addScrollView(){
         let frame = CGRect(x: 0, y: 0, width: 500, height:300)
         let myScrollView = NSScrollView(frame: frame)
         let image = NSImage(named: NSImage.Name("desk"))
         let imageViewFrame = CGRect(x: 0, y: 0, width: (image?.size.width)!, height:  (image?.size.height)!)
         let imageView = NSImageView(frame: imageViewFrame)
         imageView.image = image
         myScrollView.hasVerticalScroller = true
         myScrollView.hasHorizontalScroller = true
         myScrollView.documentView = imageView
         
         self.view.addSubview(myScrollView)
     }

如何滚动到指定位置

NSClipView提供俩方法感动到指定位置

 func scroll(to newOrigin: NSPoint)
 func scrollToVisible(_ rect: NSRect) -> Bool

如何禁止一个方向的滚动

子类和ScrollView,然后重写scrollWheel,在x或y到达某个值的时候返回即可

文章原文

官方网站

本博客视频实例讲解教程可以去youtube、头条号、bilibili、csdn都可以找到.
bilibili和youtube都可以搜索到
视频地址之一
随课程的源码地址

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李长鸿-峰云逸飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值