1

我想随着值的变化增加和减少uislider中的圆圈大小..

这是我的代码

绘图.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];


 }

在这段代码中,圆的大小增加了但没有减少,另一个问题是圆形外观,输出是 .

在此处输入图像描述

4

1 回答 1

1

好的,您的代码有效,只是看起来不像。添加

[circle removeFromSuperview];
circle = nil;

正上方

circle = [[draw alloc] initWithFrame:positionFrame value:r];

你不断在之前的圆圈之上绘制新的圆圈,所以它呈现出奇怪的形状,而且看起来也没有减少。

编辑

正如@Larme 指出的那样,要重绘你的圆圈而不是每次都创建一个新圆圈,你必须更改你的“draw”对象以包含一个公共方法,该方法重新分配你的“draw”圆圈对象的直径。

-(void) setDiameterWithFloat: (float)x{

    value = x;

}

然后在您的sliderValueIBAction 中,调用此新方法以根据您的滑块分配新直径并使用以下命令重新绘制圆setNeedsDisplay

[circle setDiameterWithFloat:mySlider.value];
[circle setNeedsDisplay];

这允许您将对象的初始化移动到viewDidLoad您的 ViewController 中,它将与视图的其余部分一起创建和加载一次。

于 2013-07-23T14:55:51.397 回答