我正试图在圆圈的边框画一条带有垂直虚线的圆圈。
我试过这样的事情,但它在圈子里做点。
CAShapeLayer *circle = [CAShapeLayer layer];
circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 2.0*radius, 2.0*radius) cornerRadius:radius].CGPath;
circle.fillColor = [UIColor clearColor].CGColor;
circle.strokeColor = [UIColor redColor].CGColor;
circle.lineWidth = 1;
circle.lineDashPattern = @[@2, @3];
[[self.view layer] addSublayer:circle];
答案 0 :(得分:2)
请尝试使用以下代码,它对我有用。 1)取UIView子类,并在.h文件中实现代码
#import <UIKit/UIKit.h>
@interface ViewClass : UIView
@property (nonatomic) NSUInteger numberOfGraduations;
@property (nonatomic) CGFloat arcDegreeStart;
@property (nonatomic) CGFloat arcDegreeEnd;
@property (nonatomic) CGPoint arcCenter;
@property (nonatomic) CGFloat arcRadius;
@property (nonatomic) CGFloat deltaArc;
-(void)drawGraduation:(CGPoint )center Radius:(CGFloat)radius Angle:(CGFloat)angle Length:(CGFloat)length Width:(CGFloat)width colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue;
@end
2)现在在your.m文件中,实现下面的代码
#import "ViewClass.h"
@implementation ViewClass
{
CGContextRef c;
}
-(void)drawGraduation:(CGPoint )center Radius:(CGFloat)radius Angle:(CGFloat)angle Length:(CGFloat)length Width:(CGFloat)width colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue{
c = UIGraphicsGetCurrentContext();
CGFloat radius2 = radius+length; // The radius of the end points of the graduations
CGPoint p1 = (CGPoint){cos(angle)*radius+center.x, sin(angle)*radius+center.y}; // the start point of the graduation
CGPoint p2 = (CGPoint){cos(angle)*radius2+center.x, sin(angle)*radius2+center.y}; // the end point of the graduation
CGContextMoveToPoint(c, p1.x, p1.y);
CGContextAddLineToPoint(c, p2.x, p2.y);
CGContextSetLineCap(c, kCGLineCapRound);
CGContextSetRGBStrokeColor(c, red, green, blue, 1.0);
CGContextSetLineWidth(c, width);
CGContextSetBlendMode(c,kCGBlendModeNormal);
CGContextStrokePath(c);
}
3)下面是drawRect方法..
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
CGRect r = self.bounds;
_numberOfGraduations = 31;
_arcCenter = (CGPoint){r.size.width*0.5, r.size.height*0.5}; // center of arc
_arcRadius = (r.size.width*0.5)-20; // radius of arc
CGFloat maxGraduationWidth = 1.0;
CGFloat maxGraduationWidthAngle = maxGraduationWidth/_arcRadius; // the maximum graduation width angle (used to prevent the graduations from being stroked outside of the main arc)
_arcDegreeStart =-M_PI*0.2;
_arcDegreeEnd = -M_PI*0.8;
// draw graduations
_deltaArc = (_arcDegreeEnd-_arcDegreeStart+maxGraduationWidthAngle)/(_numberOfGraduations-1); // the change in angle of the arc
for (int i = 0; i < _numberOfGraduations; i++) {
[self drawGraduation:_arcCenter Radius:_arcRadius Angle:_arcDegreeStart+(i*_deltaArc) Length:14 Width:1 colorWithRed:0.0 green:0.0 blue:1.0];
}
}