首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSImageView图像方面填充?

NSImageView图像方面填充?
EN

Stack Overflow用户
提问于 2014-04-11 02:52:05
回答 8查看 15.6K关注 0票数 25

所以我已经习惯了UIImageView,并且能够设置不同的方式来显示它的图像。比如AspectFill模式等等..。

我希望在mac应用程序上使用NSImageView完成同样的任务。在这方面,NSImageView是否与UIImageView类似,或者如何在NSImageView中显示图像,并选择不同的方式显示该图像?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2016-08-03 19:48:54

您可能会发现子类NSView和提供一个为您填充方面的CALayer要容易得多。下面是init对于这个NSView子类的样子。

代码语言:javascript
复制
- (id)initWithFrame:(NSRect)frame andImage:(NSImage*)image
{
  self = [super initWithFrame:frame];
  if (self) {
    self.layer = [[CALayer alloc] init];
    self.layer.contentsGravity = kCAGravityResizeAspectFill;
    self.layer.contents = image;
    self.wantsLayer = YES;
  }
  return self;
}

请注意,设置层的顺序,然后设置wantsLayer是非常重要的(如果首先设置wantsLayer,则会得到默认的支持层)。

您可以有一个简单地更新层内容的setImage方法。

票数 28
EN

Stack Overflow用户

发布于 2017-09-17 09:12:49

这是我用的,用Swift写的。这种方法适用于故事板--只需使用普通的NSImageView,然后用MyAspectFillImageNSImageView替换类框中的名称NSImageView .

代码语言:javascript
复制
open class MyAspectFillImageNSImageView : NSImageView {
  
  open override var image: NSImage? {
    set {
      self.layer = CALayer()
      self.layer?.contentsGravity = kCAGravityResizeAspectFill
      self.layer?.contents = newValue
      self.wantsLayer = true
      
      super.image = newValue
    }
    
    get {
      return super.image
    }
  }

    public override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
    }
    
    //the image setter isn't called when loading from a storyboard
    //manually set the image if it is already set
    required public init?(coder: NSCoder) {
        super.init(coder: coder)
        
        if let theImage = image {
            self.image = theImage
        }
    }

}
票数 14
EN

Stack Overflow用户

发布于 2014-05-04 17:52:30

我也有同样的问题。我想让图像被缩放以填充,但保持原始图像的高宽比。奇怪的是,这并不像看上去那么简单,也没有从NSImageView中脱颖而出。我希望在使用superview调整大小的同时,NSImageView规模更好。我做了一个附带的NSImageView子类,您可以在github:KPCScaleToFillNSImageView上找到它。

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

https://stackoverflow.com/questions/23002653

复制
相关文章

相似问题

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