所以我的问题最终是一个挑战。也许我走错了路,所以我想也许我可以提出想法。
上下文:
我有一组字符串(地名),我想根据UITextView中的用户输入建议答案。
方法:
我使用了两个UILabel和一个UITextView的组合来实现工作结果:suggestionLabel位于后台,searchLabel位于中间,searchInput文本视图位于前景。 textview启用交互,但文本的alpha设置为0(我不想消耗时间与填充和插入相对于我有的各种屏幕大小和自动布局约束)。输入时,更改会反映在searchLabel上,建议会基于suggestionLabel上的输入。
目标:
这是一个视觉目标。当用户根据建议选择一个地点时,该地点的个人资料会淡入,其标题设置在与搜索文本完全相同的位置。 (所有这些都是为了提供良好的转型)。
挑战:
搜索输入,标签和地方的个人资料标题必须居中(我在这里谈到文字对齐)。为了使这个工作与不同的文本层,我使用了一组自动布局约束,其中块在视图中居中,动态宽度和原始文本对齐设置为.Left
将对齐设置为.Center会使文本图层完全重叠。 所以,我想以这种方式保持这种状态,并在用户验证他们的选择时从.Left对齐转换为.Center。
我的问题是textAlignment似乎不是我们可以平滑动画的东西。所以我想知道是否有某种我可以使用的技巧:)
感谢您提出任何想法。
我不确定它是否相关,但这里是代码写的:
func textViewDidChange(textView: UITextView) { //Handle the text changes here
displaySearch.text = textView.text
displaySearch.textAlignment = NSTextAlignment.Left
displaySearch.font = UIFont(name: searchView.font.fontName, size: 23)
if suggestView.text!.rangeOfString(searchView.text) != nil{
println("exists")
}
else{
suggestView.text = ""
}
//USER INPUT
let scope = self.searchView.text
//SCANNING SUGGESTION DICT
for(var i = 0; i < dict.count; i++){
let stringon = dict[i]["place"] as! String
println(stringon)
if let range = stringon.rangeOfString(scope.lowercaseString) {
if range.startIndex == stringon.startIndex {
suggestView.text = stringon.capitalizedString
searchView.text = searchView.text.capitalizedString
suggestView.textAlignment = NSTextAlignment.Left
suggestView.font = UIFont(name: searchView.font.fontName, size: 23)
suggestView.textColor = UIColor.grayColor()
}
}
}
}
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if(text == "\n") {
textView.resignFirstResponder()
//ANIMATE TEXT ALIGNMENT
return false
}
return true
}