所以我已经习惯了UIImageView,并且能够设置不同的方式来显示它的图像。比如AspectFill模式等等..。
我希望在mac应用程序上使用NSImageView完成同样的任务。在这方面,NSImageView是否与UIImageView类似,或者如何在NSImageView中显示图像,并选择不同的方式显示该图像?
发布于 2016-08-03 19:48:54
您可能会发现子类NSView和提供一个为您填充方面的CALayer要容易得多。下面是init对于这个NSView子类的样子。
- (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方法。
发布于 2017-09-17 09:12:49
这是我用的,用Swift写的。这种方法适用于故事板--只需使用普通的NSImageView,然后用MyAspectFillImageNSImageView替换类框中的名称NSImageView .
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
}
}
}发布于 2014-05-04 17:52:30
我也有同样的问题。我想让图像被缩放以填充,但保持原始图像的高宽比。奇怪的是,这并不像看上去那么简单,也没有从NSImageView中脱颖而出。我希望在使用superview调整大小的同时,NSImageView规模更好。我做了一个附带的NSImageView子类,您可以在github:KPCScaleToFillNSImageView上找到它。
https://stackoverflow.com/questions/23002653
复制相似问题