2013-08-12 4 views
0

Я создал пользовательский контроль круга, если я отправляю значения с помощью ползунка из моего контроллера RootView. Можете ли вы мне помочь, как применить прикосновения к Circle Control, я могу изменить значения, например, сделать пользовательский слайдер вокруг моего пользовательского круга.Применить привязки к пользовательскому контролю

#import "RKCustomCircle.h" 

@implementation RKCustomCircle 
@synthesize sliderPerccentageValue; 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
     xPos = 320/2; 
     yPos = 250; 
     radius = 80; 
     rotationAngle = 0; 
    } 
    return self; 
} 


- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    [self drawCircleChart: context]; 

} 


- (void) drawCircleChart:(CGContextRef) context 
{ 
    CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor); 
    CGContextFillRect(context, CGRectMake(0, 0, 320, 480)); 
    float a = rotationAngle; 
    [self drawCirclewithStartingAngle:a withContext:context];  
} 


- (void) drawCirclewithStartingAngle:(float)startAngle withContext:(CGContextRef) context 
{ 
    float endAngle = startAngle + (sliderPerccentageValue/ 100) * (M_PI*2); 
    float adjY = yPos; 
    float rad = radius; 
    CGContextSetFillColorWithColor(context, [UIColor greenColor].CGColor); 
    CGContextSetStrokeColorWithColor(context,[UIColor blackColor].CGColor); 
    CGContextSetLineWidth(context, 1.0); 
    CGContextBeginPath(context); 
    CGContextMoveToPoint(context, xPos, adjY); 
    CGContextAddArc(context, xPos, adjY, rad, startAngle, endAngle, 0); 
    CGContextClosePath(context); 
    CGContextDrawPath(context, kCGPathFillStroke); 
} 

RootView есть

@implementation RKViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    circleView = [[RKCustomCircle alloc] initWithFrame:CGRectMake(0, 100, 320, 360)]; 

    [circleView addTarget:self action:@selector(newValue:) forControlEvents:UIControlEventValueChanged]; 

    [self.view addSubview:circleView]; 


} 



- (IBAction)sliderValueChangedInPercentage:(UISlider *)sender { 

    circleView.sliderPerccentageValue =sender.value; 

    [circleView setNeedsDisplay]; 


} 
+0

Что такое тип класса RKCustomCircle, это 'UISlider'? – iphonic

+0

Класс UIControl – tutsorg

ответ

1

Использование UITapGestureRecognizer.

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(oneTap:)]; 
    [singleTap setNumberOfTapsRequired:1]; 
    [singleTap setNumberOfTouchesRequired:1]; 
    [circleView addGestureRecognizer:singleTap]; 

Добавить этот метод

- (void)oneTap:(UIGestureRecognizer *)gesture 
{ 
    NSLog(@"Touch occur"); 

} 
+0

Я хочу применять привязки только для круга, а не для полного просмотра. – tutsorg

0

Все ваши вещи являются правильными, но только следующая часть неверна.

- (IBAction)sliderValueChangedInPercentage:(UISlider *)sender { 

    circleView.sliderPerccentageValue =sender.value; 

    [circleView setNeedsDisplay]; 


} 

Приведенный выше код не обеспечивает никакого значения, потому что вы привязаны к контролю, который реализует UIControl, не UISlider. Вам также не нужно, ваш UIControl будет работать.

Вместо этого вы можете иметь события касания внутри вашего элемента управления, не нужно добавлять какие-либо действия извне, и вам нужно обнаружить круговое касание и отслеживать значения, см. это приложение here, это поможет вам получить значения при касании кругового движения.

Надеюсь, это поможет вам. Всего наилучшего.

0

Вам необходимо переопределить метод кругового обзора pointInside:withEvent:. Обратитесь к this за дополнительной информацией.

 Смежные вопросы

  • Нет связанных вопросов^_^