我想实现this github project中显示的效果,但我不想使用SpriteKit来实现这一目标。
所以我尝试在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
制作,之后会产生问题。
任何人都可以给我一些指导吗?
答案 0 :(得分:3)
将小圆圈绘制成一个单独的视图,位于大圆圈的前面(顶部)。例如,它可以是UIImageView。
给小圆圈一个UIPanGestureRecognizer以使其可拖动。
在手势识别器处理程序中,移动视图以跟随用户的手势,除之外,如果视图移动距离大圆圈的中心一定距离,则不移动视图。< / p>