1

私は UILabel を持っています。私がやりたいことは、その高さをスムーズに 0 に変更することです。

CGRect newFrame = self.label1.frame;
newFrame.size.height = 0;

[UIView animateWithDuration:1.0 animations:^{

    self.label1.frame = newFrame;
}];

問題は、アニメーションがジャミングしているということです。ラベルがテキストのサイズと位置を変更しようとしていると思います。それが機能しない理由です。ラベルのプロパティのすべての可能な組み合わせを試しましたが、成功しませんでした。

4

2 に答える 2

7

あなたUILabelを別のものに囲みUIView、囲むUIView autoresizesSubviews' プロパティをNOおよびclipToBoundsに設定し、囲んYESでいるものの高さをアニメーション化することができますUIView...

于 2012-07-12T19:10:28.797 に答える
3

変換してみてください。私はあなたのためにこのコードを掘り出しました:

    //[self setAnchorPoint:CGPointMake(0.5, 1.0) forView:self.label];
    [UIView animateWithDuration:0.3 
                      delay:0
                    options:UIViewAnimationCurveEaseInOut 
                 animations:^{ 
                     //Scale the height to close to zero
                     //0.00001, because 0.0 behaves strange
                     self.label.transform = CGAffineTransformMakeScale(1, 0.00001);
                 } 
                 completion:^(BOOL finished) {
                     self.label.hidden = YES;
                 }];

これで真ん中が縮みます。上部または下部に縮小する場合は、アンカー ポイントを設定する必要があります。私もこれのためのいくつかのコードを持っています:

- (void) setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)view {
CGPoint newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x, view.bounds.size.height * anchorPoint.y);
CGPoint oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x, view.bounds.size.height * view.layer.anchorPoint.y);

newPoint = CGPointApplyAffineTransform(newPoint, view.transform);
oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform);

CGPoint position = view.layer.position;

position.x -= oldPoint.x;
position.x += newPoint.x;

position.y -= oldPoint.y;
position.y += newPoint.y;

view.layer.position = position;
view.layer.anchorPoint = anchorPoint;
}
于 2012-07-12T19:18:43.773 に答える