寺子屋管理者

  • アバター画像

教えて!iPhoneアプリ開発全般

公開寺子屋 1 年と 3 か月前に活動

iPhoneアプリ開発全般についての寺子屋です。

円の描画 collisionBehavior  (2件の投稿)

← 寺子屋講義   寺子屋講義案内
  • アバター画像 catiapple による3 年と 11 か月前の発言:

    UIDynamicAnimatorで描画された円をgravityBehaviorで落下させ、
    collisionBehaviorで他の物体とぶつかるたびに色が変わるように、しています。

    たくさんの円を一度に作ると、メモリー圧迫で動きが鈍くなるので
    出来るだけ軽くしてやりたいと思い、もともと

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    CGPoint p = [[touches anyObject] locationInView:self.view];
    UIView *circle = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 40, 40)];
    circle.backgroundColor = [UIColor colorWithRed:0.236 green:0.658 blue:0.887 alpha:1];
    circle.layer.borderWidth = 0.0;
    circle.layer.cornerRadius = 20;
    circle. center = p;

    [self.view addSubview:circle];
    と描いていたのを改良してやりたいと思い弄っている状態です。

    UIViewのサブクラスを作って円を描きます。
    - (void)drawRect:(CGRect)rect
    {
    CGContextRef c = UIGraphicsGetCurrentContext();
    CGFloat w = self.bounds.size.width;
    CGFloat h = self.bounds.size.width;
    CGContextSetFillColorWithColor(c, self.color.CGColor);

    CGContextFillEllipseInRect(c, CGRectMake(0, 0, w, h));
    }

    これをUIViewController( UICircleView )に、
    UICircleView * circleView = [[UICircleView alloc] initWithFrame:CGRectMake(100, 40, 40, 40)];
    vu.backgroundColor = [UIColor clearColor];
    [self.view addSubview:circleView];

    これに、UIAnimator、UIGravityBehavior 、UICollisionBehaviorをセット。
    これで、円は画面上でアニメーションするのですが、
    衝突時に色が変わるようにすると、衝突した時点で透明にしていたFrameに色がついて、四角くなってしまいます。
    円の状態をどうやって保てば良いのかが解りません。

    是非、アドバイスを頂けないでしょうか?
    よろしくお願いいたします。

  • アバター画像 catiapple による3 年と 11 か月前の発言:

    添付画像の右端、
    最初はイエローの円で始まり,一度衝突すると四角に変わる。
    元のイエローの円はそのままに,オレンジ色の四角になってしまう。