0

UIImageViewをサブクラス化しました。ダブルタップすると40%拡大します。カスタムUIImageViewに配置するUILabelもあり、40%拡大したいと思います。

正しくアニメーション化できないようです。

-(void)enlargeImage
{
    CGPoint pointCenter = self.center;
    CGPoint labelCenter = self.displayNameLabel.center;

    [UIView animateWithDuration:1
                          delay:0
                        options:(UIViewAnimationOptionAllowUserInteraction) 
                     animations:^{
                     self.frame = CGRectMake(self.frame.origin.x,
                                             self.frame.origin.y,
                                             self.frame.size.width * (1 + self.sizeMultiplier),
                                             self.frame.size.height * (1 + self.sizeMultiplier));
                         // Commented out after setting the autoresizeMask on the label
                         /*
                         self.displayNameLabel.frame = CGRectMake(self.displayNameLabel.frame.origin.x,
                                                                  self.displayNameLabel.frame.origin.y,
                                                                  self.displayNameLabel.frame.size.width * (1 + self.sizeMultiplier),
                                                                  self.displayNameLabel.frame.size.height * (1 + self.sizeMultiplier));
                         */
                         self.layer.shadowOpacity = 1;
                     }
                     completion:^(BOOL finished)
                     {
                         [self callDelegateSelect];
                     }];

    self.center = pointCenter;

    //self.displayNameLabel.center = labelCenter;
    //self.displayNameLabel.center = CGPointMake((self.frame.size.width / 2), (self.frame.size.height / 2));

    self.isSelected = TRUE;
}


-(void)shrinkImageWithZoomScale:(float)zoomScale
{
    CGPoint pointCenter = self.center;

    CGPoint labelCenter = self.displayNameLabel.center;

    [UIView animateWithDuration:1
                          delay:0
                        options:(UIViewAnimationOptionAllowUserInteraction)
                     animations:^{
                     self.frame = CGRectMake(self.frame.origin.x,
                                             self.frame.origin.y,
                                             (self.originalHeight / zoomScale),
                                             (self.originalHeight / zoomScale));

                         // Commented out after setting the autoresizeMask on the label
                         /*
                         self.displayNameLabel.frame = CGRectMake(self.displayNameLabel.frame.origin.x,
                                                                  self.displayNameLabel.frame.origin.y,
                                                                  ((self.originalLableHeight) / zoomScale),
                                                                  ((self.originalLableHeight) / zoomScale));
                         */
                         self.layer.shadowOpacity = 0;
                     }
                     completion:^(BOOL finished)
                    {
                        [self callDelegateDeselect];
                    }];

    self.center = pointCenter;
    //self.displayNameLabel.center = labelCenter;
    //self.displayNameLabel.center = CGPointMake((self.frame.size.width / 2), (self.frame.size.height / 2));

    self.isSelected = FALSE;
}

カスタムUIImageViewは、私が望むように正確にアニメーション化しますが、UILabelは誤動作します。

選択解除(UILabelの背景はオレンジに設定されています):

未選択

選択:

選択

UIImageViewのポイント参照が変更されているので、UILabelに指示しているポイントが混乱していると思いますか?

編集:

カスタムUIImageViewの:

self.autoresizesSubviews = TRUE;

サブビューUILabel:

self.displayNameLabel.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);

これによりサイズの問題は解決しますが、中心からは拡大しません。成長すると、右にシフトし、左から中央に向かってアニメーション化します。収縮すると、左にシフトし、右に中央に向かってアニメートします。また、アニメーションコードでラベルのフレームを設定することについてもコメントしました。

4

1 に答える 1

1

UILabelが のサブビューである場合、UIImageViewの自動サイズ変更オプションを設定してUILabel、そのスーパービューが自動的にサイズ変更されるようにすることができます。

また、 のautoresizesSubviewsプロパティが にUIImageView設定されていることを確認してくださいYES(ちなみにこれがデフォルトです)。

于 2012-09-26T15:17:02.857 に答える