使用 UISlider 移动到图像视图

Posted

技术标签:

【中文标题】使用 UISlider 移动到图像视图【英文标题】:Moving Two UIImageView's with UISlider 【发布时间】:2014-05-17 21:35:08 【问题描述】:

我正在尝试根据 UISlider 将两个 UIImageView 一起移动。这是一张图片,便于理解:

当滑块的球滑到最左边(零值)时,只会显示绿色。当它滑到最右边(值 600)时,应该只显示红色。如果滑块的值为 480,它应该显示 80% 的红色图片和 20% 的绿色。我用来尝试实现此目的的代码:

- (void)viewDidLoad

    [super viewDidLoad];

    self.slider.minimumValue = 0;
    self.slider.maximumValue = 600;


- (IBAction)sliderChanged:(id)sender 

    [imageViewLeft setFrame:CGRectMake(slider.value - 50, imageViewLeft.frame.origin.y,imageViewLeft.frame.size.width,imageViewLeft.frame.size.height)];

        [imageViewRight setFrame:CGRectMake(slider.value + 50, imageViewRight.frame.origin.y,imageViewRight.frame.size.width,imageViewRight.frame.size.height)];


这工作得很好,但是第二次我更改滑块时,红色图像(名为 imageViewLeft)会缩小,而 imageViewRight 保持相同大小。我一生都无法弄清楚为什么(我对编程和 ios 还是很陌生)。有谁知道我应该改变什么或如何最好地做到这一点?

【问题讨论】:

您的图像浏览量有多大?它们都是全屏宽度(320)吗? @rdelmar 他们已经过全屏了,每个都是 481 x 568。 你是从哪里得出50这个值的?它与你所说的你正在尝试做的事情无关。当滑块在中间时(值为 300),绿色视图的左边缘将为 350,即偏离屏幕右侧。 离开绿色背景全屏,只调整红色视图不是更容易吗? 【参考方案1】:

您可以通过保持绿色背景全屏并仅调整红色视图来实现或多或少相同的效果:

- (void)viewDidLoad

    [super viewDidLoad];

    self.slider.minimumValue = 0;
    self.slider.maximumValue = 600;

    imageViewRight.frame = self.view.bounds;


- (IBAction)sliderChanged:(id)sender 
    [imageViewLeft setFrame:CGRectMake(0, 0,(self.slider.value/self.slider.maximumValue)*sliderimageViewRight.frame.size.width,imageViewRight.frame.size.height)];

或者,如果您仍然希望两个视图都是边对边的,那么您可以这样做:

- (void)viewDidLoad

    [super viewDidLoad];

    self.slider.minimumValue = 0;
    self.slider.maximumValue = 600;


- (IBAction)sliderChanged:(id)sender 
    [imageViewLeft setFrame:CGRectMake(0, 0,(self.slider.value/self.slider.maximumValue)*self.view.bounds.size.width,self.view.bounds.size.height)];
    [imageViewRight setFrame:CGRectMake(imageViewLeft.frame.size.width, 0,self.view.bounds.size.width-imageViewLeft.frame.size.width,self.view.bounds.size.height)];

【讨论】:

【参考方案2】:
[self.red setFrame:CGRectMake(slider.value+50-self.view.frame.size.width, imageViewLeft.frame.origin.y,self.view.frame.size.width, imageViewLeft.frame.size.height)];
[self.green setFrame:CGRectMake(slider.value+50, imageViewRight.frame.origin.y,self.view.frame.size.width, imageViewRight.frame.size.height)];

并将最大滑块值设置为其宽度:

self.slider.maximumValue = self.slider.frame.size.width;

【讨论】:

谢谢您,先生,这是有道理的。但是,代码仍然在做基本相同的事情,我应该将 50 作为值,还是你知道我可能做错了什么吗?

以上是关于使用 UISlider 移动到图像视图的主要内容,如果未能解决你的问题,请参考以下文章

拇指图像不会移动到 UISlider 的边缘

UISlider拖动在iOS中表现异常

根据 UISlider 位置快速移动视图的正确方法是啥?

删除 UISlider 旋钮或快速更改图像

自动滚动 UISlider

Objective C UISlider 仅更改最小轨迹图像