oc之mac中NSImageView

https://blog.****.net/lovechris00/article/details/77983328
关键词:MacOS 开发、NSImageView、gif、imageScaling、canDrawSubviewsIntoLayer、setAnimates、imageFrameStyle

定义
创建和基本使用
展示 gif 动图
很6的属性setEditable
背景色 和 imageFrameStyle 的冲突
添加圆角
给NSImageView增加 backgroundColor 属性
系统图片
参考资料
定义

NSImageView对象可以将NSImage对象的图片数据显示在一个矩形里。一个可以编辑的NSImageView的对象的使用方法 和 NSImage对象一样,支持复制、粘贴、拖拽、删除等操作。还有一点,必须是在可编辑的、有图片内容的状态下,NSImageView对象才能执行这些操作。

创建和基本使用


- (void)addImgView{

    NSImageView *imgView = [[NSImageView alloc]init];

    imgView.frame = NSMakeRect(100, 100, 250, 200);


    imgView.imageFrameStyle = NSImageFramePhoto; //图片边框的样式
    imgView.wantsLayer = YES;
    imgView.layer.backgroundColor = [NSColor cyanColor].CGColor;

//    NSImage *computerimage = [NSImage imageNamed:NSImageNamePathTemplate];
//    
//    imgView.image = computerimage;

    imgView.image = [NSImage imageNamed:@"swift"];
    imgView.imageScaling = NSImageScaleNone;

    [imgView setAnimates:YES];

    imgView.imageAlignment = NSImageAlignTopRight; //图片内容对于控件的位置

    [imgView setEditable:YES]; //用户能否直接将图片拖到一个NSImageView类里,666

    [imgView setAllowsCutCopyPaste:YES];//表示用户能否对图片内容进行剪切、复制、粘贴行操作

    [self.window.contentView addSubview:imgView];
}

展示 .gif 动图

网上一般都说,设置 imgView.animates = YES; 即可,其实还需要设置 imgView.canDrawSubviewsIntoLayer = YES;。

- (void)addGif{

    NSImageView *imgView = [[NSImageView alloc]initWithFrame:NSMakeRect(100, 100, 100, 100)];
    [self.window.contentView addSubview:imgView];

    NSImage *img1 = [NSImage imageNamed:@"songListWave.gif"];

    imgView.imageScaling = NSImageScaleNone;
    imgView.animates = YES;
    imgView.image = img1;

    imgView.canDrawSubviewsIntoLayer = YES;
}

很6的属性:setEditable

= yes 的时候,直接将图片拖到一个NSImageView 控件里,图片就可以变成这个拖拽的图,效果如下: 
这个属性在 iOS 上是没有的。

oc之mac中NSImageView

问题:拖拽时相应的代理相应方法?

背景色 和 imageFrameStyle 的冲突

如果同时设置了背景色(有效),但后面设置了imageFrameStyle 的话,背景色就没效果了,无论代码先后。

    imgView.imageFrameStyle = NSImageFramePhoto; //图片边框的样式
    imgView.wantsLayer = YES;
    imgView.layer.backgroundColor = [NSColor cyanColor].CGColor;

添加圆角

imgBg.wantsLayer = YES;
imgBg.layer.cornerRadius = 100;

给NSImageView增加 backgroundColor 属性

创建新的 ImageView 继承自 NSImageView,添加 NSColor *backgroundColor 属性;

具体步骤可参考: 
http://www.jianshu.com/p/9cceffcac235

核心代码:

.m中的代码 - (void)setBackgroundColor:(NSColor *)backgroundColor { _backgroundColor = backgroundColor; [self setNeedsDisplay:YES]; } - (void)drawRect:(NSRect)dirtyRect { [super drawRect:dirtyRect]; // 这个地方必须要判断,否则会被填充为黑色 if (_backgroundColor) { NSRect rect = self.frame; [_backgroundColor set]; [NSBezierPath fillRect:rect]; } // Drawing code here. }

系统图片

macOS 可以直接调用系统图标,如: 

oc之mac中NSImageView

 

 

oc之mac中NSImageView
NSImage *computerimage = [NSImage imageNamed:NSImageNamePathTemplate];

系统图标有100多个,我把名字取出来用 collectinView 做了个 demo,大家可以根据名字取用图片。效果显示如下:

具体可见:http://blog.****.net/lovechris00/article/details/77994908

参考资料

江蒙尘 : http://www.jianshu.com/p/0fa6fc713d30
--------------------- 
作者:lovechris00 

原文:https://blog.****.net/lovechris00/article/details/77983328 
 

 

 

 

 

 

学习Mac开发第四弹 通过NSImageView加载图片

2017年01月04日 18:58:25 不在犯二的IT男 阅读数:3095 标签: mac 更多

个人分类: mac 开发

 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.****.net/lengshengren/article/details/54022780

 

学习Mac开发第四弹 通过NSImageView加载图片

 

  • 创建NSImageView
    1 . 拖拽大法好 Autolayout 创建一个宽高160 *160 的NSImageView

    创建是正方形的 运行后图片居然没有进行铺满。 
    修改下Scaling为None

    运行效果如下 cool 这是我想要的结果
    如何你想代码创建如下:
    NSImageView *imageView = [[NSImageView alloc]initWithFrame:CGRectMake(self.view.frame.size.width/2-80, self.view.frame.size.height/2+80, 160, 160)];
  • 读取资源图片
    拖拽个avatarImageView属性对象
    @property (weak) IBOutlet NSImageView *avatarImageView;
    第一种方法


    • //加载本地图片,缓存加载图片


    • self.avatarImageView.image = [NSImage imageNamed:@"2.jpg"];

  • 第二种方法


    • //加载本地图片 ,不缓存加载图片,常用大图片显示,


    • NSString *filePath = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg"];


    • self.avatarImageView.image = [[NSImage alloc]initWithContentsOfFile:filePath];

  • 第三种方法


    • //加载网络图片


    • self.avatarImageView.image = [[NSImage alloc]initWithContentsOfURL:[NSURL URLWithString:@"https://img-blog.****.net/20161123152252486"]];

  • 第四种方法 当然也支持大名鼎鼎的SDWebimage库


    • //SDWebimage


    • [self.avatarImageView sd_setImageWithURL:[NSURL URLWithString:@"https://img-blog.****.net/20161123152252486"]];
  •  
  • 显示圆形图片


    • self.avatarImageView.image = [NSImage imageNamed:@"2.jpg"];


    • self.avatarImageView.imageScaling =   NSImageScaleNone;


    • self.avatarImageView.wantsLayer = YES;


    • self.avatarImageView.layer.masksToBounds = YES;


    • self.avatarImageView.layer.cornerRadius = 80.f;


    • self.avatarImageView.layer.borderWidth = 3.0;


    • self.avatarImageView.layer.borderColor = [[NSColor redColor] CGColor];

  • 这个貌似跟iOS开发没什么区别 效果如下图 
  • 其他属性


    • //是否可以编辑


    • self.avatarImageView.enabled = YES;


    •    


    • //对齐方式


    • self.avatarImageView.imageAlignment = NSImageAlignCenter;


    •  


    • //    typedef NS_ENUM(NSUInteger, NSImageAlignment) {


    • //        NSImageAlignCenter = 0,


    • //        NSImageAlignTop,


    • //        NSImageAlignTopLeft,


    • //        NSImageAlignTopRight,


    • //        NSImageAlignLeft,


    • //        NSImageAlignBottom,


    • //        NSImageAlignBottomLeft,


    • //        NSImageAlignBottomRight,


    • //        NSImageAlignRight


    • //    };