2015-05-10 3 views
2

Я хочу, чтобы на моем изображении профиля была обрамлена рамка. Я также хочу, чтобы только определенный процент границы был заполнен в зависимости от того, какая часть информации профиля завершена.Рисовать круг вокруг изображения.

Если требуется имя пользователя, адрес электронной почты, пол, школа и адрес, и если пользователь предоставляет только 3 из вышеуказанных полей, я хочу, чтобы круговая граница была заполнена на 60% и аналогичным образом.

Мой код выглядит следующим образом: однако он отображает только 100% заполненный круг, и я не могу контролировать, какой процент круга, который я должен окрашивать. Как я могу это решить? На следующем рисунке показано, чего я хочу достичь.

Изображение

enter image description here

Код

self.profileImageView.layer.cornerRadius = self.profileImageView.frame.size.width/2; 
self.profileImageView.layer.borderColor = [UIColor whiteColor].CGColor; 
self.profileImageView.clipsToBounds = YES; 
+1

Я сомневаюсь, что вы можете сделать это со слоями, однако вы должны искать (CGPath или) UIBezierPath здесь является то, что может вам начать http://stackoverflow.com/questions/20035548/drawing-half-circles -with-coregraphics – ColdSteel

+0

@ user3351949 CAShapeLayer на самом деле очень подходит для этого. –

+0

@ Давид, когда я сказал слои, я упомянул свойство слоя UIView, извините за то, что неясно. – ColdSteel

ответ

2

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

Для этого есть разные уровни лень. Самый простой способ - нарисовать его в слое перед изображением. И даже тогда у вас есть выбор: вы можете нарисовать его, используя вызовы рисования Quartz, или вы можете попросить CAShapeLayer нарисовать его для вас. Одна хорошая вещь о CAShapeLayer заключается в том, что вы можете легко анимировать рост дуги (путем изменения strokeEnd).

+0

Хороший ответ! Спасибо, обратите внимание на это для будущих потребностей :-) – ColdSteel

+0

На самом деле у меня действительно есть примерный пример кода в этом ответе: http://stackoverflow.com/a/29503780/341994 – matt

+0

Удивительное спасибо вам матовый :-) – ColdSteel

3

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

UIBezierPath *circlePath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(200, 400) radius:20.f startAngle:-M_PI_2 endAngle:0 clockwise:NO]; 

CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init]; 
[shapeLayer setStrokeColor:[UIColor blueColor].CGColor]; 
[shapeLayer setFillColor:[UIColor clearColor].CGColor]; 
[shapeLayer setLineWidth:5.f]; 
[shapeLayer setPath:circlePath.CGPath]; 
[self.view.layer addSublayer:shapeLayer]; 
Смежные вопросы