Próbuję ożywić UITextField
, ale zostałem złapany przez irytujący i dziwny problem. Moja animacja ma następującą sekwencję:Dziwne zachowanie podczas animowania UITextField
W pierwszym stanie aplikacja ma UITextField
, aparat UIButton
i anuluj UIButton
po naciśnięciu przycisku aparatu, który nie jest już pokazał, ponieważ jest już umieszczony na granicach wniosku. Właściwie moja aplikacja ma 320 szerokości i anuluj pochodzenie jest (350,7)
W drugim stanie, gdy dotyka użytkownika na UITextField
, kamera kanał alfa przycisk jest ustawiony na 0, a pochodzenie przycisk anulowania ustawiony jest na (247,7).
Stan końcowy jest taki sam jak pierwszy stan przycisku użytkownik po dotknięciu przycisku Przejdź klawiatury lub anulować.
Podczas procesu szerokość UITextField i przycisk rozpoczęcia anulowania na osi X są animowane.
Mój kod to:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
barcodeSearchButton.userInteractionEnabled = NO;
cancelButton.userInteractionEnabled = NO;
CGFloat cancelButtonXOffset = CGRectGetMaxX(barcodeSearchButton.frame) - cancelButton.frame.size.width;
CGFloat searchFieldWidth = searchField.frame.size.width - cancelButton.frame.size.width + barcodeSearchButton.frame.size.width;
[UIView animateWithDuration:0.3
animations:^{
searchField.frame = CGRectMake(searchField.frame.origin.x, searchField.frame.origin.y, searchFieldWidth, searchField.frame.size.height);
cancelButton.alpha = 1.0;
cancelButton.frame = CGRectMake(cancelButtonXOffset, cancelButton.frame.origin.y, cancelButton.frame.size.width,cancelButton.frame.size.height);
barcodeSearchButton.alpha = 0.0;
}
completion:^(BOOL finished) {
barcodeSearchButton.userInteractionEnabled = NO;
cancelButton.userInteractionEnabled = YES;
}];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
barcodeSearchButton.userInteractionEnabled = NO;
cancelButton.userInteractionEnabled = NO;
[UIView animateWithDuration:0.3
animations:^{
searchField.frame = CGRectMake(searchField.frame.origin.x, searchField.frame.origin.y, searchFieldStartWidth, searchField.frame.size.height);
cancelButton.alpha = 0.0;
cancelButton.frame = CGRectMake(cancelButtonStartX, cancelButton.frame.origin.y, cancelButton.frame.size.width,cancelButton.frame.size.height);
barcodeSearchButton.alpha = 1.0;
}
completion:^(BOOL finished) {
barcodeSearchButton.userInteractionEnabled = YES;
cancelButton.userInteractionEnabled = NO;
}];
}
Gdy animacja jest wykonywany aż do ostatecznego stan tylko po raz pierwszy, co oznacza, użytkownik dotknął UITextField, zapisałem (ta część jest ważna) jakiś tekst w polu a następnie użytkownik dotknął przycisku powrotu klawiatury, pojawia się problem. Problem polega na tym, że tekst pisany w UITextField jest animowany, gdy szerokość UITextField jest również animowana.
animacja zachowuje się jak poniżej:
- W
UITextField
sięga do jego wartości początkowej. - przycisk Anuluj plecami do swojego pierwotnego pochodzenia
- przycisk aparatu jest ustawiony na 1,0
- wpisywanych tekst leci z lewego górnego rogu
UITextField
i ląduje wUITextfield
na stanowisku, że nie należy poszły.
Problem polega na tym, że krok 4 nie powinien się zdarzyć, a problem występuje tylko raz. Jeśli ponownie rozpoczniesz proces (dotknij pola uitext, wpisz tekst, dotknij klawisza powrotu), krok 4 nie nastąpi.
Spędzam cały dzień próbując rozwiązać ten problem, ale nie udało mi się.
Ponadto, za pomocą tekstu zamiast właściwości tekstu zastępczego może bałagan ze swoimi kolorami, więc trzeba będzie ustalić, że aż tak dobrze. –