【问题标题】:How to get group, which SVGElement belongs to?如何获取组,SVGElement 属于哪个组?
【发布时间】:2013-03-17 16:59:38
【问题描述】:

现在我正在这样做:

NodeList* elementsUsingTagG = [third_floor.DOMDocument getElementsByTagName:@"g"];
auds = [elementsUsingTagG.internalArray objectAtIndex:1];
SVGElement *elem = (SVGElement*)[third_floor.DOMDocument getElementById:hitLayer.name];
if ([auds.childNodes.internalArray containsObject:elem])
{
    [self deselectTappedLayer];
    lastTappedLayer = hitLayer;

    if (lastTappedLayer != nil)
    {
        lastTappedLayer.opacity = 1.0f;
        NSLog(@"Clicked on auditory %@, highlight it!", hitLayer.name);
    }
}

我可以获取 SVGElement/CALayer/Node 的一些属性,它标识了这个元素所属的组吗?谢谢

【问题讨论】:

  • 你的意思是向上遍历到g-tag 的第一个父节点?
  • 我的意思是有没有办法获取元素的组名,如果它被任何组包含的话。所以,换句话说,是的,向上遍历直到找到任何 g-tag 或将获得根节点。

标签: ios objective-c svg calayer svgkit


【解决方案1】:

我猜是这样的。我还没有测试过代码,但我希望它可以帮助你。

迭代版本:

- (Element *)findFirstParentElementFromNode:(Node *)node
                                withTagName:(NSString *)tagName {
    for (node = node.parentNode; node != nil; node = node.parentNode) {
        if (![node isKindOfClass:[Element class]]) {
            continue;
        }

        Element *element = (Element *)node;
        if([element.tagName isEqualToString:tagName]) {
            return element;
        }
    }

    return nil;
}

递归版本:

- (Element *)findFirstParentElementFromNode:(Node *)node
                                withTagName:(NSString *)tagName {
    if (node.parentNode == nil) {
        return nil;
    }

    if ([node.parentNode isKindOfClass:[Element class]]) {
        Element *element = (Element *)node.parentNode;
        if([element.tagName isEqualToString:tagName]) {
            return element;
        }
    }

    return [self findFirstParentElementFrom:node.parentNode
                                withTagName:tagName];
}

在你的情况下使用其中一个:

Element *groupElement = [self findFirstParentElementFromNode:elem
                                                 withTagName:@"g"];

【讨论】:

  • 然后获取nameElement的属性?
  • 嗯不确定。 name 你的意思是某种组名?也许您正在寻找id 属性?例如。 NSString *groupId = [groupElement getAttribute:@"id"]
  • 如果没有,您能否在某处发布一个示例 SVG,并描述您希望在点击哪个 svg 元素时找到哪个 svg 组。
  • imgh.us/test_15.svg 在这里。 name 我的意思是通过 1 行代码确定 group(组名称)单击的元素所属的行。在此示例中,group 是一组听觉。
  • 在该文件中,我看到两组 (<g>-tags),一组 ID 为“layer1”,一组 ID 为“g6474”。但我猜你想得到名为“aud-15-3-5”等的id:s?但那些似乎在矩形和路径上。对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
相关资源
最近更新 更多