2013-08-30 3 views
0

Я хочу создать пользовательский вид прогресса, который прогрессирует, когда пользователь нажимает кнопку и останавливается при отпускании кнопки. Пустое подвью представляет собой фон прогресса, и я нарисовал квадрат, который выступает в качестве отправной точки. Пустой вид должен заполняться до тех пор, пока кнопка не будет выпущена. Как я продолжаю заполнять представление до тех пор, пока кнопка не будет отпущена?Как нарисовать представление прогресса с использованием Core Graphics

Вот мой код:

CGContextRef context=UIGraphicsGetCurrentContext(); 
CGContextSetLineWidth(context, 2.0); 
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor); 


CGRect square=CGRectMake(0, 0, 5, 9); 
CGContextAddRect(context, square); 
CGContextStrokePath(context); 

CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor); 


CGContextFillRect(context, square); 

В контроллере представления ViewDidLoad

SeekBar *seek=[[SeekBar alloc]initWithFrame:CGRectMake(0, 320, 320, 9)]; 
    [self.view addSubview:seek]; 

Я новичок в основном graphics.Is это правильный подход?

ответ

0

Хорошо, вот какой код, который делает постоянный прогресс, как вы упомянули. То, что вы действительно хотите сделать, - это настроить ширину заполнения на основе прогресса. Взгляните на метод drawRect:.

Кроме того, вы хотите подключить SeekBar к кнопке, где, когда кто-то прикасается к прогрессу, увеличивается/запускается, и когда они отпускают кнопку, прогресс останавливается. Этот метод вызывает awakeFromNib:.

Если вы все еще смущены этим кодом, я могу опубликовать образец проекта, чтобы вы могли создавать и наблюдать за всем, что работает вместе.

SeekBar.h

#import <UIKit/UIKit.h> 

@interface SeekBar : UIView 
@property (nonatomic, strong) IBOutlet UIButton *button; 
@end 

SeekBar.m

#import "SeekBar.h" 

@interface SeekBar() 
@property (nonatomic) float progress; 
@property (nonatomic, strong) NSTimer *timer; 
@property (nonatomic, strong) UILabel *completeLabel; 
@end 

@implementation SeekBar 

- (void)awakeFromNib { 
    [self.button addTarget:self action:@selector(startProgress) forControlEvents:UIControlEventTouchDown]; 
    [self.button addTarget:self action:@selector(stopProgress) forControlEvents:UIControlEventTouchUpInside]; 
} 

- (void)startProgress { 
    if (![self.subviews containsObject:self.completeLabel]) { 
     [self addSubview:self.completeLabel]; 
    } 
    self.progress = 0.0; 
    self.timer = [NSTimer scheduledTimerWithTimeInterval:0.001 target:self selector:@selector(incrementProgress) userInfo:nil repeats:YES]; 
} 

- (void)incrementProgress { 
    if (self.progress <= 1.0) { 
     self.progress += 0.001; 
     [self setNeedsDisplay]; 
     self.completeLabel.text = @"Loading..."; 
    } else { 
     self.completeLabel.text = @"Complete"; 
    } 
} 

- (UILabel *)completeLabel { 
    if (!_completeLabel) { 
     _completeLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, self.frame.size.width-10, self.frame.size.height)]; 
     _completeLabel.backgroundColor = [UIColor clearColor]; 
     _completeLabel.textColor = [UIColor whiteColor]; 
    } 
    return _completeLabel; 
} 

- (void)stopProgress { 
    [self.timer invalidate]; 
} 

- (void)drawRect:(CGRect)rect { 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor); 
    UIRectFill(CGRectMake(0, 0, rect.size.width * self.progress, rect.size.height)); 
} 

@end 
+0

ли это когда-нибудь исправить проблему? –