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