簡體   English   中英

自定義UIView調整大小,同時識別平移手勢

[英]Custom UIView resizing while recognizing pan gesture

我試圖達到以下效果。 我有一個可以處於兩種不同狀態的視圖-折疊和展開)。 請參閱屏幕截圖以了解我的想法:

倒塌展開式

這些狀態之間的轉換應通過平移手勢來觸發-用戶平移視圖將展開,用戶平移視圖將折疊。

我可以通過在視圖子類的init部分中實現自定義手勢識別器來實現此目的:

UIPanGestureRecognizer* recognizer = [[UIPanGestureRecognizer alloc] initWithTarget: self action: @selector(panned:)];
recognizer.delegate = self;
[self addGestureRecognizer: recognizer];

然后檢測正確的垂直平移手勢:

- (void)panned:(UIPanGestureRecognizer*)gestureRecognizer
{
    static CGPoint lastPoint;
    if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
        lastPoint = [gestureRecognizer locationInView: self];
        return;
    }

    if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
        if (p.y > lastPoint.y && self.expanded == NO) {
            [self toggle];
        }
        else if (p.y < lastPoint.y && self.expanded == YES)
        {
            [self toggle];
        }
    }
}

然后基於self.expanded屬性,我布置子視圖並相應地更改框架。 一切正常或多或少。 我唯一的問題是-我想在用戶平移手指時顯示兩種狀態之間的過渡-因此基本上,視圖應開始逐漸來回擴展(如果用戶來回搖動),然后在手勢時進入擴展狀態完成了。

最簡單的方法是什么?

我要做的是在折疊狀態和展開狀態之間設計一個動畫。 (這可能涉及隨着時間的推移更改一個視圖,或者在兩個不同的視圖之間淡入/移動,一個處於折疊狀態,另一個處於展開狀態。)現在按照手勢驅動動畫,如我在此處說明的那樣:

https://stackoverflow.com/a/22677298/341994

基本上,您將動畫附加到圖層上,其speed設置為0,因此實際上什么也沒有發生。 然后,您跟蹤手勢並不斷更改圖層的timeOffset以更改動畫的“幀”以使其匹配。

(在這種情況下,一個人不禁觀察到,自定義過渡動畫已經為您完成了這一工作-即,在兩個視圖控制器的視圖之間進行過渡,並在其中添加了自己的交互式動畫。因此,如果您僅適用於iOS 7,實際上使用自定義過渡動畫可能是最簡單的,這實際上就是在Calendar應用中實現每周一次的每月過渡的方式,您在注釋中適當地提到了-這只是一個推送/彈出式過渡,自定義互動動畫。)

暫無
暫無

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

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