当按下UILabel
时,我正在制作一个“突出显示”UILabel
(一个具有相同的框架和按下的UILabel
的位置),应该闪烁。
目前,高亮标签闪烁,但未正确居中。这是代码:
-(void) flashRowViewController:(RowViewController*)rvc
{
NSLog(@"row center: (%f, %f)", rvc.rowLabel.center.x, rvc.rowLabel.center.y);
highlight.frame = rvc.rowLabel.frame;
// highlight.center = rvc.rowLabel.center; // NSlog results are the same with or without this statement
NSLog(@"highlight center: (%f, %f)", highlight.center.x, highlight.center.y);
highlight.alpha = 1.0;
[UIView animateWithDuration:1.00
animations:^{
highlight.alpha = 0.0;
}];
}
我很困惑。也许我刚看这个太久了,需要一个外在的视角。以下是NSLog的一个示例:
2012-05-28 10:40:41.603 RREF [89755:f803]行中心:(138.000000, 40.000000)
2012-05-28 10:40:41.604 RREF [89755:f803]亮点中心: (138.000000,40.000000)
2012-05-28 10:40:43.538 RREF [89755:f803]行中心:(138.000000, 120.000000)
2012-05-28 10:40:43.538 RREF [89755:f803]突出显示中心: (138.000000,120.000000)
2012-05-28 10:40:45.533 RREF [89755:f803]行中心:(138.000000, 200.000000)
2012-05-28 10:40:45.534 RREF [89755:f803]突出显示中心: (138.000000,200.000000)
此输出中的实际坐标是当前的。高亮标签只是没有移动到正确的位置!同样,它目前闪烁,只是没有居中。
答案 0 :(得分:2)
为什么不使用highlightedTextColor
例如
label.highlightedTextColor = [UIColor redColor];
然后在你的触摸事件中:
[UIView animateWithDuration:1.0
animations:^(void) {
label.highlighted = YES;
}
completion:^(BOOL finished) {
label.highlighted = NO;
}];
答案 1 :(得分:0)
还没有尝试过iTukker的解决方案,但我得到了另一个很好的解决方案,即使用[label.layer setBackgroundColor:(CGColor)]
-(void) flashRowViewController:(RowViewController*)rvc
{
[rvc.rowLabel.layer setBackgroundColor:[highlightColor CGColor]];
[UIView animateWithDuration:1.00
animations:^{
[rvc.rowLabel.layer setBackgroundColor:[[UIColor clearColor] CGColor]];
}];
}
答案 2 :(得分:0)
首先,您应该使用NSStringFromCGPoint
功能打印出视图中心。
第二 - 你确定你只是在这个地方改变框架吗?动画需要一秒钟,所以如果你在其他地方写了高亮位置,即使日志正确也不会居中。您是否尝试在动画完成回调中记录位置?
第三 - 你确定这两个标签是以同样的方式创建的吗?文本对齐怎么样?字体大小怎么样?当你说“没有正确居中”时,这是什么意思?
Forth - 你可以使用动画来改变第一个标签的颜色/背景,你不需要两个标签。