2017-10-10 87 views
0

調整位於NSAttributedString中的圖像時,出現奇怪的問題。調整大小的擴展工作正常,但是當圖像被添加到NSAttributedString時,出於某種原因它會垂直翻轉。添加到NSAttributedString時翻轉圖像

這是伸縮擴展:

extension NSImage { 
    func resize(containerWidth: CGFloat) -> NSImage { 

    var scale : CGFloat = 1.0 
    let currentWidth = self.size.width 
    let currentHeight = self.size.height 

    if currentWidth > containerWidth { 
     scale = (containerWidth * 0.9)/currentWidth 
    } 

    let newWidth = currentWidth * scale 
    let newHeight = currentHeight * scale 

    self.size = NSSize(width: newWidth, height: newHeight) 

    return self 
    } 
} 

這裏是屬性串枚舉在圖像上:

newAttributedString.enumerateAttribute(NSAttributedStringKey.attachment, in: NSMakeRange(0, newAttributedString.length), options: []) { value, range, stop in 
    if let attachement = value as? NSTextAttachment { 
     let image = attachement.image(forBounds: attachement.bounds, textContainer: NSTextContainer(), characterIndex: range.location)! 

     let newImage = image.resize(containerWidth: markdown.bounds.width) 
     let newAttribute = NSTextAttachment() 
     newAttribute.image = newImage 
     newAttributedString.addAttribute(NSAttributedStringKey.attachment, value: newAttribute, range: range) 
    } 
} 

我已經設置斷點和檢查圖像,他們是全部在正確的旋轉中,除了當它到達這條線時:

newAttributedString.addAttribute(NSAttributedStringKey.attachment, value: newAttribute, range: range) 

wh圖像垂直翻轉。

我不知道什麼可能導致這種垂直翻轉。有沒有辦法來解決這個問題?

回答

0

我想通了,它比我做得更簡單。

由於圖像是在一個NSAttribuetdString被追加到NSTextView我並不需要在NSAttributedString來調整每個圖像,而我不得不設置NSTextView中的附件縮放與

markdown.layoutManager?.defaultAttachmentScaling = NSImageScaling.scaleProportionallyDown 

一行是所有花了

0

如果你看看開發人員文件NSTextAttachment:

https://developer.apple.com/documentation/uikit/nstextattachment

bounds參數的定義如下:

「定義接收器的圖形表示的佈局界限文本座標系。「

我知道,當使用CoreText來佈局文本時,您需要翻轉座標,所以我應該想象您需要將垂直邊界參數轉換爲垂直座標也反映。

希望有所幫助。