首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift UnsafeMutablePointer & UnsafeMutablePointer<UnsafePointer<SomeType>>

Swift UnsafeMutablePointer & UnsafeMutablePointer<UnsafePointer<SomeType>>
EN

Stack Overflow用户
提问于 2015-07-09 07:45:59
回答 1查看 1.6K关注 0票数 2

我正在尝试使用NSView的getRectsBeingDrawn,我不太确定如何转换它所需要的vars。

它的定义是:

代码语言:javascript
复制
func getRectsBeingDrawn(rects: UnsafeMutablePointer<UnsafePointer<NSRect>>, count: UnsafeMutablePointer<Int>)

我将rectscount定义为:

代码语言:javascript
复制
var rects: UnsafeMutablePointer<UnsafePointer<NSRect>> = nil            
var count: UnsafeMutablePointer<Int> = nil

这似乎很管用。调试器没有提供任何方便的方法来查看指针上的内容,所以这没有帮助。

rect应该在调用NSRect之后指向getRectsBeingDrawn数组,但它似乎没有返回任何内容。此外,我如何得到数组和int,其中的直肠和计数是指向的?

我正试图从苹果的示例"TableViewPlayground“中得到一段代码,以便快速工作。

代码语言:javascript
复制
- (void)drawSelectionInRect:(NSRect)dirtyRect {
    NSColor *primaryColor = [[NSColor alternateSelectedControlColor] colorWithAlphaComponent:0.5];
    NSColor *secondarySelectedControlColor = [[NSColor secondarySelectedControlColor] colorWithAlphaComponent:0.5];

// Implement our own custom alpha drawing
    switch (self.selectionHighlightStyle) {
        case NSTableViewSelectionHighlightStyleRegular: {
            if (self.selected) {
                if (self.emphasized) {
                    [primaryColor set];
                } else { 
                    [secondarySelectedControlColor set];
                }
                NSRect bounds = self.bounds;
                const NSRect *rects = NULL;
                NSInteger count = 0;
                [self getRectsBeingDrawn:&rects count:&count];
                for (NSInteger i = 0; i < count; i++) {
                    NSRect rect = NSIntersectionRect(bounds, rects[i]);
                    NSRectFillUsingOperation(rect, NSCompositeSourceOver);
                }
            }
            break;
        }
        default: {
            // Do super's drawing
            [super drawSelectionInRect:dirtyRect];
            break;
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-09 07:56:09

我设法把这事解决了..。我没有为rectscount正确分配内存

我所拥有的是:

代码语言:javascript
复制
var rects: UnsafeMutablePointer<UnsafePointer<NSRect>> = nil
var count: UnsafeMutablePointer<Int> = nil

最终解决这一问题的是:

代码语言:javascript
复制
var rects: UnsafeMutablePointer<UnsafePointer<NSRect>> = UnsafeMutablePointer<UnsafePointer<NSRect>>.alloc(1)
var count: UnsafeMutablePointer<Int> = UnsafeMutablePointer<Int>.alloc(1)

希望这能帮助其他人:)

如果有人感兴趣,请编辑,下面是上面的快速代码:

代码语言:javascript
复制
override func drawSelectionInRect(dirtyRect: NSRect) {
    var primaryColor = NSColor.alternateSelectedControlColor().colorWithAlphaComponent(0.5)
    var secondarySelectedControlColor = NSColor.secondarySelectedControlColor().colorWithAlphaComponent(0.5)

    switch (self.selectionHighlightStyle){
    case .Regular:
        if (self.selected){
            if self.emphasized{
                primaryColor.set()
            }else{
                secondarySelectedControlColor.set()
            }
            let bounds = self.bounds

            var rects: UnsafeMutablePointer<UnsafePointer<NSRect>> = UnsafeMutablePointer<UnsafePointer<NSRect>>.alloc(1)
            var count: UnsafeMutablePointer<Int> = UnsafeMutablePointer<Int>.alloc(1)

            self.getRectsBeingDrawn(rects, count: count)

            let rectArrayPtr = UnsafeMutableBufferPointer(start: rects, count: count.memory)
            var base = rectArrayPtr.baseAddress

            for var i = 0; i < count.memory; i++ {
                var currentRect = base.memory
                let rect = NSIntersectionRect(bounds, currentRect.memory)
                NSRectFillUsingOperation(rect, .CompositeSourceOver)
                base.successor()
            }

        }
    default:
            super.drawSelectionInRect(dirtyRect)
        }
}

编辑

根据另一项评论,在这里也采用了一种不那么冗长的方法(多亏了下面的Paul Patterson ):

http://stackoverflow.com/questions/32536855/using-getrectsbeingdrawn-with-swift

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31311166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档