我想在mac OSX应用程序中在我的屏幕上绘制动画gif.
我使用此代码插入gif:我可以看到Gif为1图片,它没有动画
只有静态图片:(我应该添加什么才能使其动画?
我使用此代码插入gif:我可以看到Gif为1图片,它没有动画
只有静态图片:(我应该添加什么才能使其动画?
#import <Cocoa/Cocoa.h> #import <Quartz/Quartz.h>//for drawing circle #import "sharedPrefferences.h" @interface GenericFanSubView : NSView { NSColor * _backgroundColor; NSImageView* imageView; } - (void)setBackgroundColor :(NSColor*)color; - (void)insertGif1; - (void)insertGif2; - (void)insertGif3; @end #import "GenericFanSubView.h" #define PI 3.14285714285714 @implementation GenericFanSubView - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code here. imageView = [[NSImageView alloc]initWithFrame:CGRectMake(0,self.frame.size.width,self.frame.size.height)]; [imageView setAnimates: YES]; } return self; } - (void)drawRect:(NSRect)dirtyRect { [super drawRect:dirtyRect]; // Drawing code here. [self drawCircleInRect]; _backgroundColor = [NSColor whiteColor]; [self insertGif1]; } -(void)drawCircleInRect { //draw colored circle here CGContextRef context = [[NSGraphicsContext // 1 currentContext] graphicsPort]; // ********** Your drawing code here ********** // 2 CGContextSetFillColorWithColor(context,[self NSColorTocgColor:(_backgroundColor)]); float radius1 = self.frame.size.height/2; float startAngle = 0; float endAngle = endAngle = PI*2; CGPoint position = CGPointMake(self.frame.size.height/2,self.frame.size.height/2);//center of the view CGContextBeginPath(context); CGContextAddArc(context,position.x,position.y,radius1,startAngle,endAngle,1); CGContextDrawPath(context,kCGPathFill); // Or kCGPathFill } - (void)setBackgroundColor :(NSColor*)color { _backgroundColor = color; [self setNeedsdisplay:YES]; } - (CGColorRef)NSColorTocgColor:(NSColor *)color { NSInteger numberOfComponents = [color numberOfComponents]; CGFloat components[numberOfComponents]; CGColorSpaceRef colorSpace = [[color colorSpace] CGColorSpace]; [color getComponents:(CGFloat *)&components]; CGColorRef cgColor = CGColorCreate(colorSpace,components); return cgColor; } //curentlly calling only this 1 - (void)insertGif1 { [imageView removeFromSuperview]; [imageView setimageScaling:NSImageScaleNone]; [imageView setAnimates: YES]; imageView.image = [NSImage imageNamed:@"FanBlades11.gif"]; [self addSubview:imageView]; } @end
编辑:我发现了问题的根源:
我在RMBlurredView的顶部添加了我的类(在圆圈内表示gif)
当我将其添加为子视图时,动画不起作用,但它适用于我添加的所有其他视图.
任何想法可能是RMBIurredView内部阻止我的NSImageView动画的原因?
编辑:
我想[self setWantsLayer:YES];这是我没有动画的原因
如何启用此功能仍然可以获得动画?
编辑:
以下是我的问题的简单示例
我的GIF:This is my gif it is invisible on white background color
解决方法
“您必须禁用NSImageView的自动缩放功能
动画播放功能.完成后,没有额外的
需要编程.它就像一个魅力!“
动画播放功能.完成后,没有额外的
需要编程.它就像一个魅力!“
—http://www.cocoabuilder.com/archive/cocoa/108530-nsimageview-and-animated-gifs.html
imageView.imageScaling = NSImageScaleNone; imageView.animates = YES;
层支持视图所需:
如果图像视图位于图层视图中,或者是图层视图本身:
imageView.canDrawSubviewsIntoLayer = YES;
使用问题自带的gif的工作示例:
NSImageView *view = [[NSImageView alloc] initWithFrame:CGRectMake(10,10,50,50)]; view.imageScaling = NSImageScaleNone; view.animates = YES; view.image = [NSImage imageNamed:@"FanBlades2_42x42.gif"]; view.canDrawSubviewsIntoLayer = YES; NSView *layerview = [[NSView alloc] initWithFrame:CGRectMake(0,60,60)]; layerview.wantsLayer = YES; [layerview addSubview:view]; [self.window.contentView addSubview:layerview];
原文地址:https://www.jb51.cc/c/116858.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。