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 上是没有的。
问题:拖拽时相应的代理相应方法?
背景色 和 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,大家可以根据名字取用图片。效果显示如下:
具体可见: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 -
// };
-