16

多くの人が同じ質問をしていることは知っていますが、提案された解決策はどれも関連性がないように思われるので、もう一度質問します: 次のコードブロックがあります:

UIImageView *moneyHolder = [[UIImageView alloc] initWithImage:moneyImage];    
if([paymentMethod.viewed intValue] == 0){
            //CGRect targetFrame = CGRectMake(0, cell.frame.size.height/2-3, cell.frame.size.width, targetHeight);
            CGRect targetFrame = moneyHolder.frame;
            targetFrame.origin.y = cell.frame.size.height/2-3;
            NSLog(@"animating");
            [UIView animateWithDuration:2
                                  delay:0
                                options: UIViewAnimationCurveEaseOut
                             animations:^{
                                 moneyHolder.frame = targetFrame;
                             } 
                             completion:^(BOOL finished){
                                 NSLog(@"done");
                             }
            ];
        }

moneyHolderフレームをアニメーション化する必要があると思います。残念ながら、これは 2 秒間ではなく、すぐに発生するようです。ログのタイムスタンプでこれを確認できます。

2012-05-11 03:41:50.102 AgilePoet[5824:15203] アニメーション化
2012-05-11 03:41:50.116 AgilePoet[5824:15203] 完了

なぜこれが起こっているのかについて誰か考えがありますか? この件に関する他のすべての質問は、プロパティがアニメーション化できないことに焦点を当てていましたが、イメージビュー フレームがアニメーション化できることはわかっています。私が考えることができる唯一のことは、このコードが私の中に書かれているということです

-tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath method. 

前もって感謝します!

4

3 に答える 3

18

ドキュメントを引用するには:

フレーム スーパービューの座標系におけるビューの位置とサイズを表すフレームの四角形。

このプロパティへの変更はアニメーション化できます。ただし、変換プロパティに非恒等変換が含まれている場合、フレーム プロパティの値は未定義であり、変更しないでください。その場合、center プロパティを使用してビューの位置を変更し、代わりに bounds プロパティを使用してサイズを調整できます。

ユーザーまたは他のコードがビューの変換マトリックスを変更した場合、フレーム プロパティへの変更は期待どおりに機能しません。

代わりに center プロパティ (ビューを移動するため) と bounds プロパティ (サイズを変更するため) を変更する必要があります。これらのプロパティは期待どおりに動作します。

于 2012-05-12T02:29:00.800 に答える
0

アニメーションがすぐに完了するもう 1 つの原因は、アニメーション化されているオブジェクト (私の場合は UIImageView) が nil の場合です。

于 2013-03-14T23:19:25.943 に答える