我想通过更改值来增大和减小uislider中的圆圈大小。

这是我的代码

绘图

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


 }

在此代码中,圆的大小增加了但没有减小,另一个问题是圆的外观,
输出是。

最佳答案

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

[circle removeFromSuperview];
circle = nil;

正上方
circle = [[draw alloc] initWithFrame:positionFrame value:r];
您不断在先前的圆上绘制新的圆,以使其具有奇特的形状,并且看起来也不会减少。

编辑

要重绘您的圆,而不是每次都创建一个新的圆,就像@Larme指出的那样,您将必须更改“绘制”对象以包含一个 public 方法,该方法可以重新分配“绘制”圆对象的直径。
-(void) setDiameterWithFloat: (float)x{

    value = x;

}

然后在sliderValue IBAction中,调用此新方法,以根据滑块分配新直径,并使用setNeedsDisplay重画圆:
[circle setDiameterWithFloat:mySlider.value];
[circle setNeedsDisplay];

这使您可以将对象的初始化移动到ViewController中的viewDidLoad,在该对象中,该对象的创建和加载将与视图的其余部分一起被加载一次。

关于iphone - 如何通过更改值来增大和减小uislider中的圆圈大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17810573/

10-13 00:01