macOS NSScrollView简单使用

先看图片

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

复制以下代码即可以运行

复制代码
@interface ViewControl ()

/** 滚动显示 */
@property (nonatomic, strong) NSScrollView *scrollView;

@end

@implementation ViewControl
#pragma mark - 懒加载
- (NSScrollView*)scrollView{
    if(!_scrollView){
        _scrollView = [[NSScrollView alloc]init];
        [self.view addSubview:self.scrollView];
       [_scrollView setBorderType:NSNoBorder];
        
        _scrollView.hasHorizontalScroller = true;//水平滚动
        _scrollView.hasVerticalScroller = false;//禁止垂直滚动
       
        _scrollView.horizontalScrollElasticity = NSScrollElasticityAllowed; //水平的弹性属性
        _scrollView.verticalScrollElasticity = NSScrollElasticityNone; //垂直的弹性属性
   
       [_scrollView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];//自适应出现或隐藏滑动条
        
    }
    return _scrollView;
}


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do view setup here.
    [self setLocationScrollView];//设定滑动位置,这里可以用NSButton的点击事件或其他控件的触发事件来设定
    
    [self layoutSubViews];//设置UI
//监听滑动位置
 [[self.scrollView contentView] setPostsBoundsChangedNotifications: YES];//发起通知
        //找个合适的地儿,注册通知
        NSNotificationCenter *center = [NSNotificationCenter defaultCenter] ;
            [center addObserver: self
                       selector: @selector(boundsDidChangeNotification:)
                           name: NSViewBoundsDidChangeNotification
                         object: [self.scrollView contentView]];
    
}

#pragma mark -UI布局
- (void)layoutSubViews{
    self.scrollView.frame = CGRectMake(100,100,200,44);//位置,或者用下面的
    //7.左右滚动条
    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.offset(30);
        make.left.offset(5);
        make.width.equalTo(ws.mas_width).offset(-10);
        make.height.equalTo(ws.mas_height).offset(-35);
    }];

}



#pragma mark - 监听滚动条事件
- (void) boundsDidChangeNotification: (NSNotification *) notification{
    // 在这里进行处理
    NSClipView *changedContentView = [notification object];
    
    // get the origin of the NSClipView of the scroll view that
    // we're watching
    
    NSPoint changedBoundsOrigin = [changedContentView documentVisibleRect].origin;
    //判断滚动条移动高度变化确认是否移动拉动滚动到底
    NSLog(@"滑动了:%f",changedBoundsOrigin.y);
    if (changedBoundsOrigin.y > 560) {
//        self.argeeButton.enabled = YES;
    }else{
//        self.argeeButton.enabled = NO;
    }
    
}


#pragma mark 设定滑动条位置
-(void)setLocationScrollView{

 float ScrollLocation = 0.0;//往右偏移量
      float MaxScroll = 0.0;//往右最大偏移量

     
      [[_collectionView enclosingScrollView] setLineScroll:0.0f];//NSView的enclosingScrollView属性可以获得视图的滚动条,如果视图没有滚动条则enclosingScrollView为nil。

      [[_collectionView enclosingScrollView] setPageScroll:0.0f];//NSView的enclosingScrollView属性可以获得视图的滚动条,如果视图没有滚动条则enclosingScrollView为nil。

        

      ScrollLocation = [[[_collectionView enclosingScrollView] contentView] bounds].origin.y;

      MaxScroll = [[[_collectionView enclosingScrollView] documentView] bounds].size.height - [[_collectionView enclosingScrollView] documentVisibleRect].size.height;

     

      ScrollLocation += 100;

        

         if(ScrollLocation < 0)

      {

          ScrollLocation = 0;

      }

     

         else if(ScrollLocation > MaxScroll)

      {

          ScrollLocation = MaxScroll;

      }

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

 按钮自己添加。触发

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

这句就可以完成偏移量。

posted on   高彰  阅读(831)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示