我希望通过值更改来增加和减少uislider中的圆圈大小。
这里是我的代码
draw.m
- (id)initWithFrame:(CGRect)frame value:(float )x
{
value=x;
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
- (void)drawRect:(CGRect)rect{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGRect rectangle = CGRectMake(6,17,value,value);
CGContextAddEllipseInRect(context, rectangle);
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
CGContextFillPath(context);
}
和ViewController.m
@implementation ViewController
@synthesize mySlider,colorLabel;
- (void)viewDidLoad
{ [super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(IBAction)sliderValue:(UISlider*)sender
{
float r=[[NSString stringWithFormat:@"%.0f",mySlider.value] floatValue];
NSLog(@"value...%f",r);
CGRect positionFrame = CGRectMake(10,100,200,100);
circle = [[draw alloc] initWithFrame:positionFrame value:r];
circle.backgroundColor=[UIColor clearColor];
[self.view addSubview:circle];
}
在此代码中,圆圈尺寸增加但不减少,另一个问题是圆圈外观, 输出是。
答案 0 :(得分:1)
好的,你的代码有效,它看起来不像。添加
[circle removeFromSuperview];
circle = nil;
正上方
circle = [[draw alloc] initWithFrame:positionFrame value:r];
你不断在前面的圆圈上绘制新的圆圈,所以它采用了奇怪的形状,而且看起来并没有减少。
修改
要重新绘制圆圈而不是每次创建一个新圆圈,正如@Larme指出的那样,您必须更改“绘图”对象以包含一个公共方法,该方法会重新分配您的“绘制”圆形对象直径。
-(void) setDiameterWithFloat: (float)x{
value = x;
}
然后在sliderValue
IBAction中,调用此新方法根据滑块指定新的直径,并使用setNeedsDisplay
重绘圆圈:
[circle setDiameterWithFloat:mySlider.value];
[circle setNeedsDisplay];
这允许您将对象的初始化移动到ViewController中的viewDidLoad
,在那里它将与视图的其余部分一起创建和加载一次。