2014-06-08 165 views
0

當創建新的UIView或平移/滑動視圖到新位置時,設置新位置和大小的正確方法是什麼。目前,爲了移動平移/滑動操作導致的視圖,我使用的比率基於我正在移動的視圖的原始位置以及與其他視圖和項目(導航欄)的關係。設置UIView的位置和大小

當移動視圖由於刷卡我執行以下操作:

CGFloat swipeUpDelta = -1 *(self.view.bounds.size.height - (self.view.bounds.size.height - recordView.frame.origin.y) - (self.navigationController.navigationBar.bounds.size.height + ([UIApplication sharedApplication].statusBarFrame.size.height))); 

[UIView animateWithDuration:.1 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ 
    recordView.frame = CGRectOffset(recordView.frame, 0, swipeUpDelta); 
} completion:nil]; 

或創建呈現在我的視圖 - 控制的正弦波視圖:

self.sineWave = [[OSDrawWave alloc] initWithFrame:CGRectMake(-1*self.view.bounds.size.width, (.75*self.view.bounds.size.height), 2*self.view.bounds.size.width, .3125*(2*self.view.bounds.size.width))]; 

一切工作正常,但我想知道是否有更好的方法來做這些事情。

回答

0

我不確定我是否理解這個問題。 initWithFrame:myView.frame被認爲是定位UIView的正確方式。在新的框架尺寸下使用animateWithDuration:也是非常標準的。

0

我不確定你的意思。當你移動一個UIView時,你可以通過多種方式移動視圖,這取決於你的代碼以及你想要的內容。以下是移動UIView中的CALayer以跟蹤觸摸位置的代碼的有效示例。你可以使用這個,你可以動畫你的視圖,你可以在改變圖層的位置或視圖中心時使用顯式的動畫(默認情況下iOS會動畫CALayer的任何改變的屬性值......你可以騎在這裏,如果你願意的話,爲UIViews啓用此功能)。如果您要移動UIView,最好根據中心屬性移動視圖。這幾乎是SpriteKit的工作原理和任何高性能的動畫引擎(避免總是重置幀...尤其是如果你不需要的話)。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *t = [touches anyObject]; 
    CGPoint p = [t locationInView:self]; 
    boxLayer.position = p; 
} 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 

    UITouch *t = [touches anyObject]; 
    CGPoint p = [t locationInView:self]; 
    [CATransaction begin]; 
    [CATransaction setDisableActions:YES]; 
    boxLayer.position = p; 
    [CATransaction commit]; 
} 

作爲一個說明,請注意下面的代碼行

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
/*UITouch *t = [touches anyObject]; 
CGPoint p = [t locationInView:self]; // this causes the animations to appear sluggish as there is a consistant change in destination location. The above code corrects this. 
[boxLayer setPosition:p];*/ 

這是有效的評論,可以提供你想要的結果......這一切都取決於你想要什麼。