分段控制优雅

时间:2015-03-09 04:34:20

标签: ios objective-c iphone-6 segmentedcontrol

我在Objective C中为iPhone 6编码,我编写的图像视图在用户按下分段控件上的三个按钮时会发生变化。我的代码工作正常,但我想知道是否有更优雅的方法让UISegmentedControl在三个图像之间循环UIImageView。有没有比在每个新开关案例中定义新图像对象更有效的方法来实现这一目标?以下是相关代码:

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *myImageView;

@end

@implementation ViewController
- (IBAction)myControls:(id)sender {
UISegmentedControl *ctrl =
    (UISegmentedControl *)
    sender;

switch([ctrl selectedSegmentIndex])
{
    case 0:
    {UIImage *image =
        [UIImage imageNamed: @"picture.tiff"];
        self.myImageView.image = image;}
        break;
    case 1:
    {UIImage *image1 =
        [UIImage imageNamed: @"picture1.tiff"];
        self.myImageView.image = image1;}
        break;
    case 2:
    {UIImage *image2 =
        [UIImage imageNamed: @"picture2.tiff"];
        self.myImageView.image = image2;}
        break;
}
}

2 个答案:

答案 0 :(得分:0)

如果图像在固定索引处相同,则可以将它们存储在NSArray中:

NSArray * imageNames = @[ @"picture.tiff", @"picture1.tiff", @"picture2.tiff" ];

然后:

- (IBAction) myControls: (UISegmentedControl *) segmentedControl
{
   UIImage *image = [UIImage imageNamed: imageNames[segmentedControl.selectedSegmentIndex]];
   self.myImageView.image = image;
}

答案 1 :(得分:0)

如果tiff在内存中非常小,请将它们分别放在具有相同帧的三个UIImageViews中。要显示其中一个,请一次只显示三个中的一个。

为每个图像视图指定一个标记,例如32,33和34.而不是单数myImageView属性,保留一个名为myImageViews的数组。然后是一个只有一个可见的方法:

- (void)showImageViewWithTag:(NSInteger)tag {
    for (UIImageView *imageView in self. myImageViews) {
        imageView.alpha = (imageView.tag == tag)? 1.0 : 0.0;
    }
}

初始化UI时调用一次。最后,当用户更改开关时:

- (IBAction)myControls:(UIView *)sender {
    [self showImageViewWithTag:sender.tag+32]
}