0

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

@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;
}
}
4

2 回答 2

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]
}
于 2015-03-09T05:12:55.390 回答
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;
}
于 2015-03-09T04:48:55.517 回答