根据标签设置 UIImage

Posted

技术标签:

【中文标题】根据标签设置 UIImage【英文标题】:Set UIImage based on tag 【发布时间】:2012-01-05 03:06:00 【问题描述】:

我正在编写一个循环遍历 LED UIImageView 数组的脚本,这些 LED UIImageView 以数字顺序设置并由标签选择。根据步骤(又名数字),它在 LED 图像上显示为打开或关闭。此方法的主要目标是执行当前步骤并显示“LED 开启”图像,同时将其减一并显示上一步的“LED 关闭”图像。因此,一次只能点亮一个 LED。

不幸的是,我只能让“LED on”图像正确显示。序列中的所有 LED 都会亮起,但它们永远不会熄灭。我的第一个猜测是我没有以正确的方式减去 NSInterger。但是,当我检查日志时,一切都在它应该在的地方。如果当前步骤为 2,则上一步为 1。不知道为什么这不起作用。谢谢!

sequencerLocation 和 previousLocation 都设置为属性。

- (void)clockLoop:(UInt8)seqClockPulse

//cast to an int to use in loop
NSInteger stepCount = sequencerSteps;

//increment sequencer on pulse in
sequencerLocation++;

if(sequencerLocation > stepCount)

    sequencerLocation = 1;


//setup previous step location
previousLocation = (sequencerLocation - 1);

if (previousLocation == 0)

    previousLocation = stepCount;


//change led color in led array
for (UIImageView *led in sequencerLEDArray)

    if(led.tag == sequencerLocation)
    
        UIImageView *previousLed = (UIImageView *)[led viewWithTag:previousLocation];
        [previousLed setImage:[UIImage imageNamed:@"images/seq_LED_off.png"]];
        NSLog(@"Previous: %d", previousLocation);

        UIImageView *currentLed = (UIImageView *)[led viewWithTag:sequencerLocation];
        [currentLed setImage:[UIImage imageNamed:@"images/seq_LED_on.png"]];
        NSLog(@"Current: %d", sequencerLocation);
    

【问题讨论】:

【参考方案1】:
//change led color in led array
for (UIImageView *led in sequencerLEDArray)

if(led.tag == sequencerLocation)

    //  I THINK the problem is here
  //  UIImageView *previousLed = (UIImageView *)[led viewWithTag:previousLocation];
    //  TRY THIS instead
    UIImageView *previousLed = [led.superview viewWithTag:previousLocation];
    [previousLed setImage:[UIImage imageNamed:@"images/seq_LED_off.png"]];
    NSLog(@"Previous: %d", previousLocation);

    // HERE you don't need to search for the tag you already tested for it in your if statement
    UIImageView *currentLed = (UIImageView *)[led viewWithTag:sequencerLocation];
    [currentLed setImage:[UIImage imageNamed:@"images/seq_LED_on.png"]];
    NSLog(@"Current: %d", sequencerLocation);


viewWithTag:Discussion

此方法在当前视图及其所有子视图中搜索指定视图。

因此,当您通过其标签搜索 led 时,它会自行返回,但当您搜索其兄弟时却找不到它,这就是为什么我建议将 led.superview 作为搜索您的位置的原因标签,父母应该能够找到它的另一个孩子。

【讨论】:

谢谢,成功了。我将阅读更多关于superviews的内容,以更好地掌握这个概念。再次感谢。 @anthony superview (singular) :每个 UIView 可以有 1 个超级视图和任意数量的子视图。您可以将层次结构表示为tree graph,每个节点只有一个“父视图”或父视图。这是基本概念。

以上是关于根据标签设置 UIImage的主要内容,如果未能解决你的问题,请参考以下文章

根据标签设置 UIImage

企业微信标签和个人标签,是不是可以根据部门之间设置可见,如果有,请问是不是有提供对应api接口?

如何根据复选框值设置标签样式? [复制]

如何根据暗/亮模式设置默认标签颜色(在 Swift 中)

根据 UITableViewCell 标签高度和宽度调整背景图片大小

根据UILabel动态设置UIView的高度