簡體   English   中英

iOS:使用帶慣性和頭頂的Pinch手勢進行縮放

[英]iOS: Zoom using Pinch gesture with inertia and overhead

我是iOS的新手,我想弄清楚如何使用捏捏手勢來進行慣性和頭頂縮放(我不知道頭頂頭這個單詞在這種情況下是否正確,在德語中會稱為“Überschwingen”) 。

基本上應該做什么:它應該具有可以縮放的最大和最小比例(在我的情況下為1.0到4.0)。 手勢完成后,它應該以給定的速度運動並制作出曲線動畫,還允許視圖以給定的比例上下浮動,然后像拉力一樣移回最小值或最大值。

為此,我運行了Gesture Recognizer,並且設法利用我的最小和最大比例(使用stackoverflow的示例)。 這是我到目前為止所得到的:

- (void)handle_pinch:(UIPinchGestureRecognizer *)recognizer
{

    if([recognizer state] == UIGestureRecognizerStateBegan) {
        previousScale = 1.0;
        lastPoint = [recognizer locationInView:[recognizer view]];
    }

    if ([recognizer state] == UIGestureRecognizerStateChanged) {

        CGFloat currentScale = [[[recognizer view].layer valueForKeyPath:@"transform.scale"] floatValue];

        // Constants to adjust the max/min values of zoom
        const CGFloat kMaxScale = 4.0;
        const CGFloat kMinScale = 1.0;

        CGFloat newScale = 1 -  (previousScale - [recognizer scale]); // new scale is in the range (0-1)
        newScale = MIN(newScale, kMaxScale / currentScale);
        newScale = MAX(newScale, kMinScale / currentScale);
        scale = newScale;

        CGAffineTransform transform = CGAffineTransformScale([[recognizer view] transform], newScale, newScale);

        [recognizer view].transform = transform;

        CGPoint point = [recognizer locationInView:[recognizer view]];
        CGAffineTransform transformTranslate = CGAffineTransformTranslate([[recognizer view] transform], point.x-lastPoint.x, point.y-lastPoint.y);

        [recognizer view].transform = transformTranslate;
        NSLog(@"Transformed");
    }       
}

但是我現在知道如何在此處添加動畫。 謝謝你的幫助!

您應該使用UIScrollView來實現縮放效果,因為UIScrollView已經與動畫集成在一起。 只需將您的UIView添加到UIScrollView中即可。

這是關於UIScrollView的出色教程。 他正在使用UIImageView,但是UIView的行為類似。

https://www.raywenderlich.com/122139/uiscrollview-tutorial

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM