分段控制优雅
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 应用程序?