10

ビューの「ズームイン」を模倣したいと思います。大きい方のビューは小さい方のビューのスーパービューにサブビューとして追加され、大きい方のビューは小さい方のビューからズームインしているかのように見えます。小さい方のビューの長方形とfromRect拡大された大きい方のビューの最後のフレームをfinalRect考えると、適切な変換は何でしょうか?

ここに画像の説明を入力してください

メソッドのシグネチャはview、スーパービューであるため、次のようになると思います。私は自分自身を助けるためにこれを書きましたが、まだそれを理解することはできません。

-(CGAffineTransform) translatedAndScaledTransformUsingViewRect:(CGRect)viewRect fromRect:(CGRect)fromRect inView:(UIView*) view
{
//calculate the scaling based on the final frame of viewToBeStretched (viewRect) vs the "fromRect"
CGFloat scaleX = ?, scaleY = ?;
CGAffineTransform scaleTransform = CGAffineTransformMakeScale(scaleX, scaleY);

//use translation instead of modifying the view's center, since frame changes with transforms are no good
CGFloat translationX = ?, translationY =?;
CGAffineTransform translationTransform = CGAffineTransformMakeTranslation(translationX, translationY);

CGAffineTransform final = CGAffineTransformConcat(scaleTransform, translationTransform);

return final;
}
4

3 に答える 3

21

したがって、実際の実装は非常に簡単です。

- (CGAffineTransform)translatedAndScaledTransformUsingViewRect:(CGRect)viewRect fromRect:(CGRect)fromRect {

    CGSize scales = CGSizeMake(viewRect.size.width/fromRect.size.width, viewRect.size.height/fromRect.size.height);
    CGPoint offset = CGPointMake(CGRectGetMidX(viewRect) - CGRectGetMidX(fromRect), CGRectGetMidY(viewRect) - CGRectGetMidY(fromRect));
    return CGAffineTransformMake(scales.width, 0, 0, scales.height, offset.x, offset.y);

}

ここで完全な例を見ることができます:https ://github.com/vGubriienko/TransformTest

(IDを完全な画像として使用するには、まだ更新する必要があります)

于 2013-02-08T01:27:42.887 に答える
2

画像のみを扱う場合は、UIImageView の contentMode プロパティを利用して、UIViewContentModeScaleAspectFill に設定できます。次に、[UIView transitionWithView:] を実行し、UIImageView のフレームを最終的な CGRect (または画面全体が正しく塗りつぶされるため) に設定します。探しているズームイン効果が得られます。

これを行う最善の方法は、スーパービューのサブビューとして UIImageView のコピーを作成し、それを元の UIImageView の真上に配置して、そこから変換を実行することです。

しばらく前にそれを UITableViewController に拡張する関数をいくつか書きました。これにより、黒へのフェードとズームの遷移で任意の UIImageView をズームインでき、最終的な画像はズーム可能であり、閉じることができます。

https://github.com/PeterCen/iOS-Image-Presenter/

于 2013-01-30T01:34:07.033 に答える
1

最良の解決策は、マトリックスを使用して手動で変換を作成することでした。

于 2013-02-08T01:18:14.383 に答える