NSScrollview scrollPoint不会滚动到点

时间:2013-06-13 21:51:39

标签: cocoa scroll nsscrollview

我正在尝试2小时让我的滚动视图滚动特定点。它令人沮丧,我无法告诉你为什么它不会工作。

我有一个scrollview,它是一个NSClipView。 它们是在我的scrollPoint之前的AppDelegate中创建的。

但是

[myclipview scrollPoint:NSMakePoint(1000.0, 0.0)];

无效,

[[self.scrollView documentView] scrollPoint:NSMakePoint(1000.0, 0.0)];

(我希望它一直向右滚动,但不能用任何翻转方法或者某种方式滚动。)

发现了这个问题 Why is [[NSScrollView documentView] scrollPoint:] not working in loadView method?

并没有帮助我,我也没有在loadView方法中尝试它。 scrollView和myclipview也不是。有什么提示吗? scrollview工作正常,但它不会滚动到我的位置。

修改

为了保持谨慎,我做了一个小测试项目:

NSScrollView* myscrollview = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, 0, 200, 200)];
NSClipView* myclipview = [[NSClipView alloc] initWithFrame:NSMakeRect(0, 0, 500, 400)];
[myscrollview setHasVerticalScroller:YES];
[myscrollview setHasHorizontalScroller:YES];
[myscrollview setDocumentView:myclipview];

[[myscrollview documentView] scrollPoint:NSMakePoint(400, 300)];

[self.window.contentView addSubview:myscrollview];

并且它不会在任何地方滚动,我想我在这里错过了一些东西......?

1 个答案:

答案 0 :(得分:1)

小型测试项目您需要通过以下方式进行更改。 我试过这个似乎工作。如果您还有其他问题,请告诉我。

希望这能解决问题:)

   NSScrollView* myscrollview = [[NSScrollView alloc] initWithFrame:NSMakeRect(10.0f, 100.0f, 200, 200)];
    NSClipView* myclipview = [[NSClipView alloc] initWithFrame:NSMakeRect(10.0f, 100.0f, 500, 400)];
    [myscrollview setHasVerticalScroller:YES];
    [myscrollview setHasHorizontalScroller:YES];
    [myscrollview setDocumentView:myclipview];

    [self.window.contentView addSubview:myscrollview];


    //******** Code Changes from here**********
    //This Calculation needs to be done 
    CGPoint newScrollOrigin=NSMakePoint(0.0,NSMaxY([[myscrollview documentView] frame])
                                -NSHeight([[myscrollview contentView] bounds]));

    //Increment/Decrement in x of newScrollOrigin will move the scroll position horizontally
    //Increment/Decrement in y of newScrollOrigin will move the scroll position vertically.

    //Incrementation of Values depends on your requirement.
    CGPoint setOrigin = CGPointMake(newScrollOrigin.x , newScrollOrigin.y - 120.0f);

    //Set the Scroll Point
    [[myscrollview contentView] scrollToPoint:setOrigin];