我有一个自定义的UISegmentedControl。在iOS 6和bellow中它工作得很好。在iOS 7下..它看起来很好,直到我按下控制,这时,分隔符图像看起来奇怪的一瞬间。
下面是我的代码:
UIImage *segmentSelected = [[UIImage imageNamed:@"segcontrol_sel.png"]
resizableImageWithCapInsets:UIEdgeInsetsMake(6, 6, 6, 6)];
UIImage *segmentUnselected = [[UIImage imageNamed:@"segcontrol_unsel.png"]
resizableImageWithCapInsets:UIEdgeInsetsMake(6, 6, 6, 6)];
UIImage *segmentSelectedUnselected =
[UIImage imageNamed:@"segcontrol_sel_uns.png"];
UIImage *segUnselectedSelected =
[UIImage imageNamed:@"segcontrol_uns_sel.png"];
[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected
forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setBackgroundImage:segmentSelected
forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected
forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:segUnselectedSelected
forLeftSegmentState:UIControlStateNormal // | UIControlStateHighlighted
rightSegmentState:UIControlStateSelected
barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:segUnselectedSelected
forLeftSegmentState:UIControlStateHighlighted
rightSegmentState:UIControlStateSelected
barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:segmentSelectedUnselected
forLeftSegmentState:UIControlStateSelected
rightSegmentState:UIControlStateNormal //| UIControlStateHighlighted)
barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:segmentSelectedUnselected
forLeftSegmentState:UIControlStateSelected
rightSegmentState:UIControlStateHighlighted
barMetrics:UIBarMetricsDefault];
UIFont *font = [UIFont systemFontOfSize:16.0f];
UIColor *textColor = [UIColor darkGrayColor];
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
font, @"NSFontAttributeName",
textColor, @"NSForegroundColorAttributeName",
nil];
[[UISegmentedControl appearance] setTitleTextAttributes:attributes
forState:UIControlStateNormal];
当我按下UISegmentedControl时,可能会导致分隔符显示错误,您知道会发生什么情况吗?谢谢?
发布于 2014-08-13 01:32:55
我用类似于user2128193描述的方式解决了这个问题,但我没有为value changed事件添加目标,而是继承了UISegmentedControl并添加了以下两个方法:
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents
{
[super sendActionsForControlEvents:controlEvents];
if (controlEvents & UIControlEventValueChanged) {
[self removeAnimationsRecursivelyForView:self];
}
}
- (void)removeAnimationsRecursivelyForView:(UIView *)view
{
[view.layer removeAllAnimations];
for (UIView *subview in [view subviews]) {
[self removeAnimationsRecursivelyForView:subview];
}
}
显然,这仍然不是一个完美的解决方案,因为它依赖于UISegmentedControl的内部结构,但至少它将使您的代码更干净一些。
发布于 2015-06-26 21:04:56
我通过重写子类中的touchesEnded
并禁用CATransaction的动画解决了这个问题
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
CATransaction.setDisableActions(true)
super.touchesEnded(touches, withEvent: event)
}
发布于 2013-09-26 08:59:58
我也遇到了类似的问题,我发现有两件事正在发生。其中一个是您已经处理过的(为突出显示的/选定的组合设置图像)。另一种是,当你选择一个新的线段时,UISegmentedControl
会像UITableViewCells一样,在你选择它们时进行颜色高亮。而且,即使我已经定制了所有的艺术和文本,它仍然褪色到深色(我的文本甚至反转),然后它又回来了。在淡入淡出的过程中,我的分隔线的边缘很容易被看到。
我必须在模拟器中打开慢速动画才能更清楚地看到这一点。不幸的是,我还没能找到一种方法来禁用这些默认动画。
https://stackoverflow.com/questions/18894772
复制相似问题