Objective c NSBezierPath从一个圆到另一个圆的动画

Objective c NSBezierPath从一个圆到另一个圆的动画,objective-c,animation,smooth,nsbezierpath,Objective C,Animation,Smooth,Nsbezierpath,我有一个测试视图,在那里我做一些图形测试。目前,我有一个方法drawCircle,它用阴影绘制一个彩色圆圈 在awakeFromNib中,我设置了一个计时器timerAction,每0.5秒触发一次方法timerAction,该设置需要显示:YES 这样drawRect触发drawCircle,用随机颜色和阴影绘制另一个圆。见下面的方法 到目前为止一切正常。我想从一个颜色圈切换到另一个颜色圈。现在一点也不顺利。它只是从一个突然切换到另一个 我试过几种方法,但就是不知道怎么做 有什么想法吗 罗纳德

我有一个测试视图,在那里我做一些图形测试。目前,我有一个方法drawCircle,它用阴影绘制一个彩色圆圈

awakeFromNib中,我设置了一个计时器timerAction,每0.5秒触发一次方法timerAction,该设置需要显示:YES

这样drawRect触发drawCircle,用随机颜色和阴影绘制另一个圆。见下面的方法

到目前为止一切正常。我想从一个颜色圈切换到另一个颜色圈。现在一点也不顺利。它只是从一个突然切换到另一个

我试过几种方法,但就是不知道怎么做

有什么想法吗

罗纳德

TimeCircle2.h

  //
  //  TimeCircle2.h
  //  Egg&Breakfast
  //
  //  Created by Ronald Hofmann on 29.12.12.

  #import <Cocoa/Cocoa.h>

  @interface TimeCircle2 : NSView {

     CGFloat CGFalpha       ;
     CGFloat CGFblue        ;
     CGFloat CGFgreen       ;
     CGFloat CGFred         ;

     NSURL    *pathToFolder ;
     NSShadow *shadow       ;
     NSTimer  *timer        ;

     NSColor
     *myRedColor,*myGreenColor,*myRedBGColor,*myGreyColor,*myRandomColor,
     *mydarkGreyColor,*myYellowBGColor,*myBlueColor,*myBlackColor,*myDkGreenColor;

     IBOutlet NSSliderCell
     *slideHourCell, *slideMinCell, *slideSecCell ;

     float
     lineTheWidth,circleWidth,circleHeight,spaceX,spaceY,intervall,
     center1,center2,shadow1,shadow2,ankathete,gegenkathete,winkelAlpha;

     BOOL     flagButtonWasClicked ;
     int      drawRectCount,getHTime, getMTime,getSTime,goalTS ;

     IBOutlet TimeCircle2 *myTimeCircleView ;
     IBOutlet NSButton    *butStart         ;
     IBOutlet NSPanel     *mainPanel        ;
     IBOutlet NSButton    *boxForEver       ;
     IBOutlet NSButton    *boxMakeSound     ;
     IBOutlet NSButton    *timerFlagSwitch  ;

     IBOutlet NSSlider    *slideHour        ;
     IBOutlet NSSlider    *slideMin         ;
     IBOutlet NSSlider    *slideSec         ;
     IBOutlet NSSlider    *angleSlider      ;
     IBOutlet NSSlider    *volumeAdjust     ;
     IBOutlet NSTextField *txtRemark        ;
     IBOutlet NSProgressIndicator *progInd  ;

     TimeCircle2          *myTimeCircle     ;

  }

  @end

“平稳切换”到底是什么意思?要在其中设置圆的动画吗?你想让每个圆环的颜色变淡吗?是的,我想让一个圆环的颜色从一个渐变到下一个。事实上,我想看到一个红色的圆圈,例如慢慢变为蓝色的圆圈。
     //
     //  TimeCircle2.m
     //  Egg&Breakfast
     //
     //  Created by Ronald Hofmann on 29.12.12.

  #import "TimeCircle2.h"
  #import "NSObject+Utilities.h"

  @implementation TimeCircle2

  #define overLine 15
  #define kProject        @"EggBreakfast"

  #pragma mark Global Declarations
  NSBezierPath *path;
  NSBezierPath *path1,*path2,*path3,*path4;
  NSPoint  centerPoint1,centerPoint2      ;
  NSPoint  centerPoint;

  BOOL     flagButtonWasClicked           ;
  float    liveAngle,radius,transparency,intvalSet  ;


  #pragma mark Methods
  - (id)initWithFrame:(NSRect)frame
  {
     self = [super initWithFrame:frame];
     if (self) {
           // Initialization code here.
     }

     return self;
  }

  - (void) awakeFromNib      {

     timer = [[NSTimer scheduledTimerWithTimeInterval: 0.5
                                               target:self
                                             selector:@selector(timerAction:)
                                             userInfo:nil
                                              repeats:YES] retain];
  }


  - (void)drawRect:(NSRect)dirtyRect
  {
     [self drawCircle];
  }


  - (void) timerAction:(NSTimer *)aTimer {
     [self setNeedsDisplay:YES];
  }


  - (void) drawCircle        {

     NSRect bounds      = self.bounds ;
     NSBezierPath *path = [NSBezierPath bezierPath];

     shadow1 = 4; shadow2 = -shadow1;

     shadow = [NSShadow new];
     float setShadow   = 0.2f          ;

     float radius = 5+(circleHeight/2);

     spaceX       = (bounds.size.width  - circleWidth )/2.0f;
     spaceY       = (bounds.size.height - circleHeight)/2.0f;

     setShadow   = 0.2f          ;

     lineTheWidth = 1.0f;

     circleWidth  =  bounds.size.width  *0.80f;
     circleHeight =  bounds.size.height *0.80f;

     radius = 12+(circleHeight/2);

     spaceX       = (bounds.size.width  - circleWidth )/2.0f;
     spaceY       = (bounds.size.height - circleHeight)/2.0f;

     center1      =  bounds.size.width /2.0f;
     center2      =  bounds.size.height/2.0f;

     centerPoint  =  NSMakePoint(center1,center2);

     path = [ NSBezierPath bezierPathWithOvalInRect:
             (NSRect) {{ spaceX, spaceY },{ (circleWidth), (circleHeight)}}] ;

     [path setLineWidth:2.0000f];
     [[self ccRandom:0.6f :0.0f]  setStroke];

     [shadow setShadowColor: [NSColor blackColor]];
     [shadow setShadowBlurRadius: 5.0f];

     [shadow setShadowOffset: NSMakeSize(shadow1,shadow2)];
     [shadow set];

     [path stroke];

  }

  @end