gpt4 book ai didi

ios - 边界中带有垂直虚线的圆

转载 作者:行者123 更新时间:2023-12-01 19:50:22 25 4
gpt4 key购买 nike

我正在尝试在圆的边框中绘制带有垂直虚线的圆。

我已经尝试过这种方法,但是它使圆圈成圆点。

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];

最佳答案

请尝试使用下面的代码,它对我有用。
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)现在在您的.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];
}

}

关于ios - 边界中带有垂直虚线的圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46312711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com