根据标签设置 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的主要内容,如果未能解决你的问题,请参考以下文章
企业微信标签和个人标签,是不是可以根据部门之间设置可见,如果有,请问是不是有提供对应api接口?