在UITextView中将外部笔划添加到NSString

时间:2016-01-18 16:27:01

标签: ios objective-c nsattributedstring

我正在尝试为文字添加笔划并在UITextView中显示。

这就是我想要的。

在图片中(CREATED FROM PHOTOSHOP),使用了相同的字体,第一个字体为Postion "OUTSIDE",底部文字为position INSIDE

enter image description here

我在Objective-C

中使用以下代码
  NSShadow * shadow = [[NSShadow alloc] init];
    shadow.shadowColor = [UIColor blackColor];
    shadow.shadowOffset = CGSizeMake(0, 0);

    NSDictionary * textAttributes =
    @{ NSForegroundColorAttributeName : [UIColor whiteColor],
       NSShadowAttributeName          : shadow,
       NSStrokeColorAttributeName     : [UIColor blackColor],
       NSStrokeWidthAttributeName     : [NSNumber numberWithFloat:-3.0],
       NSFontAttributeName            : [UIFont fontWithName:@"UbuntuCondensed-Regular" size:40] };

    textTitleResult.attributedText = [[NSAttributedString alloc] initWithString:textTitle.text
                                                               attributes:textAttributes];

我正在实现INSIDE效果。如何将位置设置为OUTSIDE

1 个答案:

答案 0 :(得分:1)

我不认为有一个属性可以在你想要的时候完成。但是,我有一个想法可能会为你提供一种方法来假装"它

您可以在原始标签的确切位置添加其他标签。新标签的大小是笔划的一半,但笔触颜色与文本的颜色相同。因为中风"坐着#34;在边框上(文字内部的一半部分和外部的一半部分),它会阻挡原始笔划的一半,使其看起来好像在外面。

不使代码太漂亮,它看起来像这样:

drawRect

另一种选择是创建自己的自定义视图,并按照您希望的方式自行绘制(在<script type='text/javascript'> <?php echo "var categories = $jsonCats; \n"; echo "var subcats = $jsonSubCats; \n"; echo "var subsubcats = $jsonSubSubCats; \n"; ?> function loadCategories(){ var select = document.getElementById("categoriesSelect"); select.onchange = updateSubCats; for(var i = 0; i < categories.length; i++){ select.options[i] = new Option(categories[i].customer,categories[i].customer_id); } } function updateSubCats(){ var customer_id = this.value; var subcatSelect = document.getElementById("subcatsSelect") subcatSelect.onchange = updateSubSubCats;; for(var i = 0; i < subcats[customer_id].length; i++){ subcatSelect.options[i] = new Option(subcats[customer_id][i].contract,subcats[customer_id][i].contract_id); } } function updateSubSubCats(){ var subsubcatSelect = this; var contract_id = this.value; var subsubcatSelect = document.getElementById("subsubcatsSelect"); subsubcatSelect.options.length = 0; //delete all options if any present for(var i = 0; i < subsubcats[contract_id].length; i++){ subsubcatSelect.options[i] = new Option(subsubcats[contract_id][i].subcontract,subsubcats[contract_id][i].subcontract_id); } } </script> 中)。