MacOS 开发

来源:互联网 发布:数据漏斗 excel 编辑:程序博客网 时间:2024/06/03 19:18

关键词: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 上是没有的。

拖拽图片

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


背景色 和 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 可以直接调用系统图标,如:
NSImage *computerimage = [NSImage imageNamed:NSImageNamePathTemplate];

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

系统图标1

系统图标2

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


参考资料

江蒙尘 : http://www.jianshu.com/p/0fa6fc713d30