2016-08-13 8 views
2

У меня есть NSAttributedString объекты со встроенными изображениями. Они представлены в NSTextView с. В iOS я смог изменить размеры NSTextAttachment, и это делает изображение подходящим.Изменить размер изображения в NSTextView для соответствия

extension NSTextAttachment { 
    func setImageWidth(width: CGFloat, range: NSRange) { 
     var thisImage = image 
     if thisImage == nil { 
      thisImage = imageForBounds(bounds, textContainer: nil, characterIndex: range.location) 
     } 
     if thisImage != nil { 
      let ratio = thisImage!.size.height/thisImage!.size.width 
      bounds = CGRectMake(bounds.origin.x, bounds.origin.y, width, ratio * width) 
      print("New Bounds: \(bounds)") 
     } 
    } 
} 

Этот код также работает на OSX, но на самом деле он не изменяет размер изображения. Ниже вы можете видеть, что вокруг изображения есть нужный размер, но фактическое изображение переполняет окно.

enter image description here

Я также следовал следующее руководство: Implementing Rich Text with Images on OS X and iOS. Это переводит код в подклассы, но имеет тот же эффект.

Любые предложения? Есть ли что-то помимо NSTextAttachment.bounds, что я должен настраивать?

UPDATE

Я обнаружил, что изменение size компонент NSImage работ! Однако теперь он показывает все мои изображения вверх, но в правильном размере. :(

+0

Если вы хотите разрешить пользователям изменять размеры изображений, я создал библиотеку, чтобы сделать именно это: https://github.com/josephessin/ResizableTextAttachment. –

ответ

0

Решено!

extension NSImage { 
    func resizeToFit(containerWidth: CGFloat) { 
     var scaleFactor : CGFloat = 1.0 
     let currentWidth = self.size.width 
     let currentHeight = self.size.height 
     if currentWidth > containerWidth { 
      scaleFactor = (containerWidth * 0.9)/currentWidth 
     } 
     let newWidth = currentWidth * scaleFactor 
     let newHeight = currentHeight * scaleFactor 

     self.size = NSSize(width: newWidth, height: newHeight) 
     print("Size: \(size)") 
    } 
} 

Как я уже говорил в обновлении, вам необходимо изменить NSImage.size. Обратной исходит от одного из подклассов я оставил там по ссылке в этом вопросе. Как только я вернусь к основным классам, это сработает!