OS开发笔记一 NSImageView

先看三种效果图:

NSImageView 与 UIImageView 大同小异,代码如下:

        NSImageView *imageView = [[NSImageView alloc]initWithFrame:CGRectMake(100, 100, 200, 100)];
        
        imageView.image = [NSImage imageNamed:@"blackRobot”];

        imageView.wantsLayer = YES;

        imageView.layer.backgroundColor = [NSColor darkGrayColor].CGColor;
        
        [_m_windowMain.contentView addSubview:imageView];

如果不做其他处理的话,上面几行代码的效果就是图片1,背景色是灰色,图片不填充,图片本身大小比设置的图层要小一些。相反,如果设置的图层大小比图片本身小的话,那么图片显示的时候会变小,并且按照宽或者高的最大来显示,如下图:

 NSImageView 有个属性 imageScaling ,它控制了图片的填充模式,加上下面这句:

imageView.imageScaling = NSImageScaleAxesIndependently;

效果如图2所示。

typedef NS_ENUM(NSUInteger, NSImageScaling) {
    NSImageScaleProportionallyDown = 0, // 下填充优先
    NSImageScaleAxesIndependently,      // 平铺
    NSImageScaleNone,                   // 无填充
    NSImageScaleProportionallyUpOrDown, // 上下优先
     //下面三个已然废弃 
    NSScaleProportionally NS_ENUM_DEPRECATED_MAC(10_0, 10_10, "Use NSImageScaleProportionallyDown instead") = 0,
    NSScaleToFit NS_ENUM_DEPRECATED_MAC(10_0, 10_10, "Use NSImageScaleAxesIndependently instead"),
    NSScaleNone NS_ENUM_DEPRECATED_MAC(10_0, 10_10, "Use NSImageScaleNone instead")
}

NSImageView 也可以设置边框样式,imageView.imageFrameStyle = NSImageFrameNone; 

typedef NS_ENUM(NSUInteger, NSImageFrameStyle) {
    NSImageFrameNone = 0, //无边框
    NSImageFramePhoto,    //照片边框,感觉就是加了一圈黑边
    NSImageFrameGrayBezel,//灰色曲线框,圆角
    NSImageFrameGroove,   //凹陷效果,但不明显
    NSImageFrameButton    //按钮效果,等同于 突出效果
};

NSImageView 设置边框以及圆角与 UIImageView 几乎一样:

        imageView.wantsLayer = YES;
        imageView.layer.cornerRadius = 50;
        imageView.layer.borderColor = [NSColor greenColor].CGColor;
        imageView.layer.borderWidth = 4.0;

我把图层的大小设置为宽高均为100,再加上上面这几句,效果如图3。

有一个比较坑的,但也许是我自己没搞明白,就是设置阴影,经过反复验证,发现有个属性叫 shadow。

        NSShadow *shadow = [[NSShadow alloc]init];
        shadow.shadowOffset = NSMakeSize(-3, -3);
        shadow.shadowColor = [NSColor blackColor];
        shadow.shadowBlurRadius = 5.f;
        imageView.shadow = shadow;

这样的话阴影可以显示了,或者不用给这个设置属性,可以继续给Layer层设置阴影,但必须给imageview 设置 shadow。

        imageView.shadow = [[NSShadow alloc]init];
        imageView.layer.shadowColor = [NSColor blackColor].CGColor;
        imageView.layer.shadowRadius = 5.f;
        imageView.layer.shadowOffset = NSMakeSize(3, 3);
        imageView.layer.shadowOpacity = 0.75;

以上这个种写法也可以显示。但是有个问题,就是给layer设置了圆角无效了,这个暂时没有找到解决办法。

显示差不多了,那么看交互吧,UIImageview 可以添加手势,但目前我给NSImageView添加手势无效,也没有个属性叫用户交互开关。NSImageView 继承与 NSControl,那么有个属性叫 action,这个可以在NSButton中详细介绍,但是NSImageView 设置 action 也无效,暂时没找到原因。
NSImageView 响应点击事件,换另一种思路:自定义一个NSImageView的子类,监测这个类的鼠标事件即可。详情见《OS开发笔记一鼠标事件》。

转载于:https://my.oschina.net/wolfcub1110/blog/1505461

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值