0
에 거짓말 문제 설명 :드롭`points`는 것을 '포인트 센터'경로
그것의 둘레를 따라 점을 가진 반원형 다이얼을 만듭니다. 사용자는이 다이얼을 팬 및 rotate
수 있습니다.
접근하십시오 UIView
- (
[UIBezierPath bezierPathWithOvalInRect]
및CAShapeLayer
사용) - 는
dots
(원형 추가CALayer
개체)를이 원의 원주를 따라 이 도트의 중심이 둘레에 놓여 있다고하자.
장애물 :
도트가 경로를 따라 그려하지만, 이러한 점의 중심이 주위에 거짓말을하지 않습니다.
코드는 다음과 같다 :
@property (nonatomic, retain) CAShapeLayer* dialLineLayer;
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
self.dialLineLayer = [CAShapeLayer layer];
CGRect path = CGRectMake(SCREEN_WIDTH /2 - self.radius, -self.radius, 2 * self.radius, 2 * self.radius);
[self.dialLineLayer setPath:[[UIBezierPath bezierPathWithOvalInRect:path] CGPath]];
[self.dialLineLayer setStrokeColor:[[UIColor la_white10Color] CGColor]];
[self.dialLineLayer setFillColor:[[UIColor clearColor] CGColor]];
[self.dialLineLayer setLineWidth:3.0f];
[self.layer addSublayer:self.dialLineLayer];
[self addDotsOnLineLayer];
}
return self;
}
- (CGFloat) radius {
// View has an aspect ratio constraint of 75:34 (W:H)
return SCREEN_WIDTH * 34/75 - 10; // Circle radius is 10px less that View's height
}
- (CGFloat) circumference {
return M_2_PI * self.radius; // 2Pi * radius
}
- (void) addDotsOnLineLayer {
CGPoint dotPoint = CGPointMake(SCREEN_WIDTH /2 - self.radius - self.radius/2, 0);
for (double t = 0; t < 2*M_PI; t += 0.2) {
CGFloat dotRadius = arc4random_uniform(10) - arc4random_uniform(3); // Random radius between 3px and 10px
CALayer* dotLayer = [CALayer layer];
dotLayer.frame = CGRectMake(dotPoint.x, dotPoint.y, dotRadius, dotRadius);
dotLayer.cornerRadius = dotRadius/2;
dotLayer.masksToBounds = YES;
dotLayer.backgroundColor = [UIColor greenColor].CGColor;
dotPoint.x = self.radius * cos(t) + (SCREEN_WIDTH/2);
dotPoint.y = self.radius * sin(t) + 0;
[self.dialLineLayer addSublayer:dotLayer];
}
}
어 ... 내 전체보기가 녹색입니다. – n00bProgrammer
어 ... 확실히 제가 제안한 변화가 아닙니다. 당신이 다른 것을 바꾸지 않았는지 확인하십시오. - 편집 내 대답 – Cabus
** 'doh'+ facepalm **보기 그것은 작동, 일부 경우에 반지름은 5 자리까지 올라 갔다. 그것을 수정했습니다. 감사 :) – n00bProgrammer