簡體   English   中英

UICollisionBehavior - UIView碰撞的自定義形狀

[英]UICollisionBehavior - custom shape for UIView collision

我試圖弄清楚如何使用UIKit Dynamics成功碰撞兩個具有自定義邊界形狀的UIView。

我可以想到解釋我的問題的最基本的例子是讓兩個圓碰撞(考慮他們的圓角)而不是他們的方形邊界。

我確定我已經在某個地方見過這個但我無法從任何官方消息來源找到關於這個主題的任何文件或討論。

我也想這樣做,但我不認為你可以在當前的UIKit Dynamics for iOS 7下做到這一點。添加到動畫師的項目必須采用UIDynamicItem協議(UIView確實)。 協議僅通過bounds屬性(CGRect)將其邊界指定為矩形。 沒有自定義命中測試。

但是,您可以向碰撞集添加固定的貝塞爾曲線路徑,它可以是圓形或任何可以用路徑制作的形狀,但它可以像其他矩形物體反彈的彎曲牆一樣。 您可以修改Xcode中的DynamicsCatalog示例代碼,以查看使用不移動的曲線邊界。

創建一個名為BumperView的新視圖文件,UIView的子類。 在BumperView.m中,使用此drawRect:

#define LINE_WIDTH 2.0
- (void)drawRect:(CGRect)rect
{
    UIBezierPath *ovalPath = [UIBezierPath bezierPathWithOvalInRect:CGRectInset(self.bounds, LINE_WIDTH/2, LINE_WIDTH/2)];
    [[UIColor blueColor] setStroke];
    [[UIColor lightGrayColor] setFill];
    ovalPath.lineWidth = LINE_WIDTH;
    [ovalPath stroke];
    [ovalPath fill];
}

在“項目屬性”頁面的故事板中,在框下方的某處添加一個視圖,並將其類更改為BumperView,並將其背景顏色更改為清除。 在APLItemPropertiesViewController.m中為它創建一個名為bumper的插座,但是給它類BumperView。 在創建了collisionBehavior之后,在viewDidAppear函數中添加以下內容:

UIBezierPath *bumperPath = [UIBezierPath bezierPathWithOvalInRect:self.bumper.frame];
[collisionBehavior addBoundaryWithIdentifier:@"Bumper" forPath:bumperPath];

運行它並轉到“項目屬性”頁面以查看橢圓形反彈的矩形。

暫無
暫無

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

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