Swift:如何找到UILabel中字母的位置(x,y)?
我试图在labelText中找到一个字母的位置。 Objective C中的代码是
NSRange range = [@"Good,Morning" rangeOfString:@","]; NSString *prefix = [@"Good,Morning" substringToIndex:range.location]; CGSize size = [prefix sizeWithFont:[UIFont systemFontOfSize:18]]; CGPoint p = CGPointMake(size.width, 0); NSLog(@"px: %f",px); NSLog(@"py: %f",py);
请有人告诉我我们如何在swift中编写上述代码? 我发现计算字符串的范围有点困难。
试试这个代码::
let range : NSRange = "Good,Morning".rangeOfString(","); let prefix: NSString = "Good,Morning".substringToIndex(range.location); let size: CGSize = prefix.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(18.0)]) let p : CGPoint = CGPointMake(size.width, 0); NSLog("px: %f",px) NSLog("py: %f",py)
我终于会推荐以下变体:
extension String { func characterPosition(character: Character, withFont: UIFont = UIFont.systemFontOfSize(18.0)) -> CGPoint? { guard let range = self.rangeOfString(String(character)) else { print("\(character) is missed") return nil } let prefix = self.substringToIndex(range.startIndex) as NSString let size = prefix.sizeWithAttributes([NSFontAttributeName: withFont]) return CGPointMake(size.width, 0) } }
客户代码:
let str = "Good,Morning" let p = str.characterPosition(",")
将此转换为swift只是语法时没有什么改变
var range: NSRange = "Good,Morning".rangeOfString(",") var prefix: String = "Good,Morning".substringToIndex(range.location) print(prefix) //Good
查找范围的安全方法是使用if-let
语句,因为rangeOfString
可能返回nil
值。 浏览以下代码:
if let range = str.rangeOfString(",") { let prefix = str.substringToIndex(range.startIndex) let size: CGSize = prefix.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(14.0)]) let p = CGPointMake(size.width, 0) }
上面的代码给出了结果: