小编Not*_*ley的帖子

我应该如何在NSScrollView中包装自定义NSView?

Cocoa的NSScrollView被解释得非常糟糕.我希望这里有人知道它的全部内容并且可以让我几秒钟.

所以我有一个自定义的NSView.我实现了-drawRect:它可以绘制一些东西,用颜色填充它,无论如何.然后我有一个NSScrollView包装它(通过界面生成器设置).

现在,内部自定义视图的大小必须大于适合外部滚动视图的大小 - 以便滚动.我意识到这一点.我偶然配置它,以便滚动视图调整到周围窗口的大小,但这应该无关紧要.

我重写了我的内部视图的-frame方法,以返回一个至少为1000x1000的帧.

- (NSRect)frame {
    CGFloat w = 1000;
    CGFloat h = 1000;
    if (self.superview.bounds.size.width > w)
        w = self.superview.bounds.size.width;
    if (self.superview.bounds.size.height > h)
        h = self.superview.bounds.size.height;
    return NSMakeRect(0, 0, w, h);
}
Run Code Online (Sandbox Code Playgroud)

这是结果,我无法解释:

  • 当滚动视图包含小于1000x1000的区域时,我可以滚动

  • 唯一充满颜色的区域(即我的-drawRect:方法对其有任何影响)是

    • 与滚动视图的边界一样大
    • 位于(0,0.我使用翻转,因此左上角,滚动后最终位于可见区域之外.
  • 位于这个不相关的矩形之外的可见区域根本没有被绘制.

除此之外,我什么都不知道.它看起来像矩形绘制剪裁到滚动视图窗口的位置和大小,或东西,但它不会采取滚动"位置"考虑在内.

应该指出的是,我真的不希望发生任何其他事情.我觉得我错过了一块,却找不到哪一块.对不起文字的墙,但我现在无法解释得更好.我希望它比回答要容易得多.

关心和希望,

不是瑞克阿斯特利

cocoa clipping objective-c nsscrollview

5
推荐指数
1
解决办法
2656
查看次数

在使用之前,如何确保对象已完成初始化?

在一个方法中编写一些Objective-C,我调用+alloc,然后-init设置一个对象.

object = [[MyClass alloc] init];
[object useFor:whatever];
Run Code Online (Sandbox Code Playgroud)

接下来的几行代码使用新创建的对象.如果前面提到的-init时间太长,我确定程序在开始使用新对象之前不会"等待",是吗?如果没有,是否有快速确保-init完成的方法?

我有时会看到编写程序的程序员

if(object = [[MyClass alloc] init]) {
    [object useFor:whatever];
}
Run Code Online (Sandbox Code Playgroud)

这是我应该去做的吗?

oop initialization objective-c

3
推荐指数
1
解决办法
164
查看次数