分段控制优雅

Posted

技术标签:

【中文标题】分段控制优雅【英文标题】:Segmented Control Elegance 【发布时间】:2015-03-09 04:34:20 【问题描述】:

我正在使用 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;


【问题讨论】:

【参考方案1】:

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

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

然后:

- (IBAction) myControls: (UISegmentedControl *) segmentedControl

   UIImage *image = [UIImage imageNamed: imageNames[segmentedControl.selectedSegmentIndex]];
   self.myImageView.image = image;

【讨论】:

【参考方案2】:

如果 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]

【讨论】:

以上是关于分段控制优雅的主要内容,如果未能解决你的问题,请参考以下文章

优雅地终止基于 Boost Asio 的 Windows 控制台应用程序

关闭 Windows 控制台时如何优雅地关闭 Java 应用程序?

如何优雅的控制goroutine的数量

全向组的优雅转向

java 多线程分段等待执行完成状况,循环屏障CyclicBarrier | Java工具类

如何优雅地使用iOS系统相机相册