0

Objective C で iPhone 6 のコーディングを行っています。また、ユーザーがセグメント化されたコントロールで 3 つのボタンを押すと変化するイメージ ビューをコーディングしています。私のコードは正しく動作していますが、UISegmentedControl を取得して 3 つの画像間で 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;
}
}
4

2 に答える 2

0

メモリ内の tiff が非常に小さい場合は、それぞれUIImageViewsを同一のフレームで 3 つに配置します。そのうちの 1 つを表示するには、一度に 3 つのうち 1 つだけを表示します。

各画像ビューに 32、33、34 などのタグを付けます。単一のmyImageViewプロパティの代わりに、 という配列を保持しますmyImageViews。次に、1 つだけを表示する方法:

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

If images are same at fixed index, you can store them in NSArray as:

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

And then:

- (IBAction) myControls: (UISegmentedControl *) segmentedControl
{
   UIImage *image = [UIImage imageNamed: imageNames[segmentedControl.selectedSegmentIndex]];
   self.myImageView.image = image;
}
于 2015-03-09T04:48:55.517 に答える