Tôi đang cố gắng tạo hiệu ứng động UITextField
nhưng tôi đã bị bắt gặp bởi một vấn đề khó chịu và kỳ lạ. hoạt hình của tôi có trình tự sau đây:Hành vi lạ khi hoạt hình UITextField
Trong trạng thái đầu tiên ứng dụng có UITextField
, camera UIButton
và hủy UIButton
sau khi nút máy ảnh mà không được cho thấy bởi vì nó được được vị trí ra khỏi giới hạn của ứng dụng. Trên thực tế ứng dụng của tôi có 320 chiều rộng và nút hủy nguồn gốc là (350,7)
Trong trạng thái thứ hai, khi chạm người dùng trên UITextField
, camera kênh nút alpha được đặt thành 0 và nguồn gốc của nút hủy được đặt thành (247,7).
Các trạng thái cuối cùng cũng giống như nút tiểu bang đầu tiên sau khi người dùng chạm vào nút Return of bàn phím hoặc hủy bỏ.
Trong quá trình xử lý chiều rộng UITextField và nút hủy xuất xứ trong trục x là hoạt ảnh.
Mã của tôi là:
- (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;
}];
}
Khi hoạt hình được thực hiện cho đến khi nhà nước chính thức CHỈ cho lần đầu tiên, có nghĩa là, người dùng chạm vào UITextField, viết xuống (phần này là quan trọng) một số văn bản về lĩnh vực và sau đó người dùng chạm vào nút quay lại bàn phím vấn đề xuất hiện. Vấn đề là văn bản đã gõ trong UITextField được làm động khi chiều rộng của UITextField cũng được làm động.
Các hình ảnh động hoạt động như dưới đây:
- Các
UITextField
trải dài trở lại giá trị ban đầu của nó. - Hủy lưng nút nguồn gốc ban đầu của nó
- nút máy ảnh được thiết lập để 1,0
- Các văn bản đánh máy bay từ góc trên bên trái của
UITextField
và nó vùng đất vàoUITextfield
đến vị trí mà nó không nên đi.
Vấn đề là bước 4 không nên xảy ra và sự cố xảy ra chỉ một lần. Nếu bắt đầu quá trình một lần nữa (chạm vào uitextfield, gõ một số văn bản, chạm vào phím quay lại) bước 4 không xảy ra.
Tôi dành cả ngày cố gắng giải quyết vấn đề này nhưng tôi đã không thành công.
Ngoài ra, sử dụng văn bản thay vì tài sản văn bản giữ chỗ có thể gây rối với màu sắc của bạn, vì vậy bạn sẽ phải khắc phục điều đó lên là tốt. –