Xcode 5 滚动后 NSScrollView 显示问题

4

NSScrollView 显示基于自定义视图(图像、复选框和文本标签)的 NSTableView。当我滚动时,重绘行时出现了延迟(错误?)。

正常:Normal

滚动后出现错误:Bugged after scroll

该项目(以及 .xib 文件)从 Xcode 4 更新到 Xcode 5 格式。我认为这个 bug 在此之后出现了,但我不确定。

有什么建议可以解决吗?

NSTableViewDataSource、NSTableViewDelegate 协议的实现:

- (NSInteger) numberOfRowsInTableView: (NSTableView *) aTableView {
return [arrayOfObjects count];
}

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    CMListItem *currentObject = [arrayOfObjects objectAtIndex: row];
    NSString *currentName = [currentObject name];
    BOOL currentState = [currentObject state];
    NSImage *currentImage = [currentObject getArtwork];
    NSString *identifier = [tableColumn identifier];

    if ([identifier isEqualToString:@"MainCell"]) {
        CMTableCellView *cellView = [tableView makeViewWithIdentifier: identifier owner: self];
        cellView.textField.stringValue = currentName;
        cellView.button.state = currentState;
        cellView.imageView.image = currentImage;
        return cellView;
    }
    return nil;
}

NSScrollView未被修改。 我的自定义表格单元视图,是NSTableCellView的子类,具有一些额外的输出。

更新:这个方法对我有帮助:将所有NSTableViewCan Draw Concurrently设置为On状态,然后将其转换为Off状态。


是的,我确定,这只是一个例子。我的NSScrollView上有像这张图片上的残影(只是不能上传自己的图片-评分不够)。 - Disminder
1
https://dl.dropboxusercontent.com/u/41688771/1.tiff - 正常 - Disminder
1
请稍后... - Disminder
好的,请展示一下如何实现滚动视图代理方法。 - HAS
我修改了原始帖子并附上了我的代码,希望能帮助找到解决方案。 我没有更多的代码可以在这个表格上工作了。 - Disminder
请按照下面的更新代码并将其更正。如果它真的有帮助。 - Hussain Shabbir
1个回答

3

我认为当启用“滚动复制”选项时,有时会出现此问题。请在IB中禁用此选项(在属性检查器中,scrollview部分,behavior)。


2
谢谢!你的答案帮助我找到了解决方案。不知道为什么,但当我为所有NSTableView树打开“可以同时绘制”时,这个问题就解决了。但是每秒帧数太低了,所以我把它关掉了(对于所有树)。现在-良好的FPS,没有这种延迟。 真的不知道发生了什么,但它确实有帮助!也许是Xcode 4-> Xcode 5转换问题,也可能是其他原因。 - Disminder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接