Como parar um tempo em que o UILabel é redimensionado a cada incremento de tempo?
Eu tenho um recurso de cronômetro no meu aplicativo que usa um atributo centralizadoUILabel
com uma fonte espaçada proporcionalmente para renderizar tempo. A cada momento, a largura da etiqueta é alterada, criando um efeito de rebatimento que parece especialmente ruim em altas velocidades. Aqui está umexemplo.
Como posso consertar isso?
ATUALIZAÇÃO DO iOS 9
Agora é uma linha:
UIFont.monospacedDigitSystemFontOfSize(17, weight: UIFontWeightRegular)
Além disso, da última vez que tentei, a solução abaixo não funcionou para o iOS 9. Desperdiçamos bastante tempo depurando antes de tropeçar nisso no cabeçalho.
SOLUÇÃO
Acabou sendo trivial com o Kit de texto no iOS 7.
Verifique se o Texto principal foi importado:
#import <CoreText/CoreText.h>
Crie uma configuração que converta números proporcionais em monoespaçada:
NSArray *monospacedSetting = @[@{UIFontFeatureTypeIdentifierKey: @(kNumberSpacingType),
UIFontFeatureSelectorIdentifierKey: @(kMonospacedNumbersSelector)}];
Crie um novo descritor de fonte anexando o atual usado porUILabel
:
UIFontDescriptor *newDescriptor = [[timeLabel.font fontDescriptor] fontDescriptorByAddingAttributes:@{UIFontDescriptorFeatureSettingsAttribute: monospacedSetting}];
Atualizar fonte da etiqueta:
// Size 0 to use previously set font size
timeLabel.font = [UIFont fontWithDescriptor:newDescriptor size:0];