iOS如何在运动中的大圆圈中绘制小圆圈限制

时间:2015-04-23 15:42:58

标签: ios objective-c draw cgrect

我想实现this github project中显示的效果,但我不想使用SpriteKit来实现这一目标。

enter image description here

所以我尝试在CircleViiew.m中绘制关于Objective-C中CGContextRef的大圆圈。

 #import "CircleView.h"
 #import <QuartzCore/QuartzCore.h>
 #define CIRCLE_RADIUS  80

 @implementation CircleView
 -(id) initWithFrame:(CGRect)frame andCircleRadius:(int) radius
 {
     self = [super initWithFrame:frame];
     if(self)
     {   
     }
     return self;
 }

 - (void)drawRect:(CGRect)rect {

     CGContextRef context = UIGraphicsGetCurrentContext();

     // set rect background color
     CGRect drawRect = CGRectMake(rect.origin.x, rect.origin.y,rect.size.width, rect.size.height);
     CGContextSetRGBFillColor(context, 100.0f/255.0f, 100.0f/255.0f, 100.0f/255.0f, 1.0f);
     CGContextFillRect(context, drawRect);

     // set line border number
     CGContextSetRGBStrokeColor(context,0.6,1,0.6,1.0);
     CGContextSetLineWidth(context, 2.0);
     CGContextAddArc(context, 82, 82, CIRCLE_RADIUS, 0, 2*M_PI, 0);
     CGContextDrawPath(context, kCGPathStroke);

// fill color
     UIColor *fillCircleColor = [UIColor colorWithRed:1.000 green:0.800 blue:0.000 alpha:1.000];
     CGContextSetFillColorWithColor(context, fillCircleColor.CGColor);
     CGContextAddArc(context, 82, 82, CIRCLE_RADIUS, 0, 2*M_PI, 0);
     CGContextDrawPath(context, kCGPathFill);

     CGContextDrawPath(context, kCGPathFillStroke);   

 }
 @end

然后在ViewController中使用圆圈。

  CircleView *circle = [[CircleView alloc] initWithFrame:CGRectMake(20, 20, 164, 164)];
     [self.view addSubview:circle];

但我不知道如何添加小圆圈覆盖大圆圈,当我们移动小圆圈时,小圆圈必须限制在大圆圈上。

使用viewDidload上的CircleView创建小圆对象来覆盖BigCircle吗?或者小圆圈必须在CircleView类中绘制?

我正在使用自动布局来创建效果。我不知道是否使用initwithFrame制作,之后会产生问题。

任何人都可以给我一些指导吗?

1 个答案:

答案 0 :(得分:3)

将小圆圈绘制成一个单独的视图,位于大圆圈的前面(顶部)。例如,它可以是UIImageView。

给小圆圈一个UIPanGestureRecognizer以使其可拖动。

在手势识别器处理程序中,移动视图以跟随用户的手势,之外,如果视图移动距离大圆圈的中心一定距离,则不移动视图。< / p>