touchesBegan在动画期间不会触发,并且C4Shape调整大小后会丢失参考

亚当·廷代尔

附加的代码有两个问题。

首先,如果将形状的动画持续时间设置为1秒,以便形状始终在移动,则touchesBegan不会触发。当我浏览时C4View.m,似乎UIViewAnimationOptionAllowUserInteraction没有设置。有没有办法我可以访问UIView来设置此选项?似乎不重写就很难C4View

http://iphonedevsdk.com/forum/iphone-sdk-development/64569-uiview-animatewithduration-blocks-the-screen-for-touch-input.html

其次,每次碰到形状时,我都希望它缩小一点。我遇到的问题是,在我第一次击打它之后,它就停止了移动。经过一番挖掘后,看起来似乎C4Shape在用新框架重建后就失去了形状。这是之前的控制台信息:

[C4Log] <C4Shape: 0x7b63820; baseClass = UIControl; 
frame = (263 691; 200 200); 
animations = { position=<CABasicAnimation: 0x1082c490>; 
animateFillColor=<CABasicAnimation: 0x8a62c00>; 
animateLineDashPhase=<CABasicAnimation: 0x8a64920>; 
animateStrokeColor=<CABasicAnimation: 0x8a64ef0>; 
animateStrokeEnd=<CABasicAnimation: 0x8a65190>; 
animateStrokeStart=<CABasicAnimation: 0x8a65430>; }; 
layer = <C4ShapeLayer: 0x7b63d00>>

之后:

[C4Log] <C4Shape: 0x1082d3a0; baseClass = UIControl; 
frame = (204 17; 180 180); 
layer = <C4ShapeLayer: 0x1082d4e0>>

首先将形状设置为nil,或者在重新定义之后重做动画似乎并不能解决问题。

//
//  C4WorkSpace.m
//  touchgame
//
//  Created by Adam Tindale on 2013-09-28.
//

#import "C4WorkSpace.h"

@implementation C4WorkSpace
{
    C4Shape * shape;
    C4Timer * timer;
    C4Label * text; 
    C4Font * font;
    int score;
}

-(void)setup
{
    score = 0;
    shape = [C4Shape ellipse:CGRectMake(self.canvas.center.x, self.canvas.center.y, 200, 200)];

    font = [C4Font fontWithName:@"Chalkduster" size:40];
    text = [C4Label labelWithText:@"Score : 0" font:font];

    [shape setAnimationDuration:0.05];
    timer = [C4Timer automaticTimerWithInterval:1.0 target:self method:@"runaway" repeats:YES];

    [self listenFor:@"touchesBegan" fromObject:shape andRunMethod:@"imhit"];

    [self.canvas addSubview:text];
    [self.canvas addSubview:shape];
}

-(void) runaway
{
    [shape setCenter:CGPointMake([C4Math randomIntBetweenA:0 andB:self.canvas.width], [C4Math randomIntBetweenA:0 andB:self.canvas.height])];

    C4Log(@"%@",shape);
}

-(void) imhit
{
    [text setText:[NSString stringWithFormat:@"Score: %d",++score]];
    [text sizeToFit];

    CGRect r = shape.frame;
    r.size = CGSizeMake(shape.size.width * 0.9, shape.size.height * 0.9);
    shape = [C4Shape ellipse:r];
}

@end
C4-特拉维斯

互动动画

C4Control / C4View / C4Window都有动画选项,允许用户在动画过程中进行交互。C4AnimationOptions是可以在中找到结构的一部分C4Defines.h

在开始动画之前,请确保调用此命令。

shape.animationOptions = ALLOWSINTERACTION;

而且,就像其他选项一样,它可以被位掩码:

shape.animationOptions = EASEOUT | AUTOREVERSE | ALLOWSINTERACTION;

(您现在不必重新加工C4View!)

改变形状大小

要更改形状的大小,您需要像这样调用形状本身的方法:

[shape ellipse:r];

以下...

shape = [C4Shape ellipse:r];

...由于以下三个原因而无法工作:

  1. 通过调用C4Shape您实际上是在创建一个新对象,而不影响已经存在的对象
  2. 通过设置,shape = [...];您可以将指针从原始形状更改为刚创建的新形状
  3. 屏幕上不存在新形状,停止的形状是您添加为子视图的原始形状。这就是为什么您的原始形状停止移动的原因,因为您现在正在引用一个新对象。

以下代码是您上面内容的修改后的版本:

#import "C4WorkSpace.h"

@implementation C4WorkSpace
{
    C4Shape * shape;
    C4Timer * timer;
    C4Label * text;
    C4Font * font;
    int score;
}

-(void)setup
{
    score = 0;
    shape = [C4Shape ellipse:CGRectMake(self.canvas.center.x, self.canvas.center.y, 200, 200)];

    font = [C4Font fontWithName:@"Chalkduster" size:40];
    text = [C4Label labelWithText:@"Score : 0" font:font];

    [shape setAnimationDuration:0.05];
    timer = [C4Timer automaticTimerWithInterval:1.0 target:self method:@"runaway" repeats:YES];

    [self listenFor:@"touchesBegan" fromObject:shape andRunMethod:@"imhit"];

    [self.canvas addSubview:text];
    [self.canvas addSubview:shape];
}

-(void) runaway {
    shape.animationOptions = ALLOWSINTERACTION;
    [shape setCenter:CGPointMake([C4Math randomIntBetweenA:0 andB:self.canvas.width], [C4Math randomIntBetweenA:0 andB:self.canvas.height])];

    C4Log(@"%@",shape);
}

-(void) imhit
{
    [text setText:[NSString stringWithFormat:@"Score: %d",++score]];
    [text sizeToFit];

    CGRect r = shape.frame;
    r.size = CGSizeMake(shape.size.width * 0.9, shape.size.height * 0.9);
    [shape ellipse:r];
}

@end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C4Shape的子类不会与实例方法成为一行

来自分类Dev

调整图像大小而不会丢失信息

来自分类Dev

jQuery窗口调整大小不会触发

来自分类Dev

调整照片的大小而不会丢失CodenameOne中的正确大小

来自分类Dev

使用AutoLayout调整圆形(圆形)UIView的大小...在调整大小的动画期间如何为cornerRadius设置动画?

来自分类Dev

Facebook图像调整大小而不会丢失其比例

来自分类Dev

使用fdisk调整分区大小而不会丢失数据

来自分类Dev

Android 动画视图不会调整其他视图的大小

来自分类Dev

在调整窗口大小之前,jQuery函数不会触发

来自分类Dev

在重新调整窗口大小之前,不会触发砌体布局

来自分类Dev

Onresize 不会在调整大小时触发

来自分类Dev

基本动画不会触发

来自分类Dev

基本动画不会触发

来自分类Dev

将Javafx对象放入数组后会丢失参考的问题

来自分类Dev

如何使用Magick ++调整大小和保存gif文件而不丢失动画

来自分类Dev

调整大小而不会模糊

来自分类Dev

调整浏览器窗口大小时,块元素变大并且不会垂直居中

来自分类Dev

调整PNG图像的大小,而不会丢失来自完全透明像素的颜色数据

来自分类Dev

通过切换布局触发的动画UICollectionView单元格调整大小

来自分类Dev

用动画调整jPanels的大小

来自分类Dev

为什么“ orientationchange”事件不会在浏览器调整大小时触发?

来自分类Dev

JS不会触发CSS动画

来自分类Dev

在QStatusBar调整大小期间防止窗口调整大小

来自分类Dev

CSS:调整大小后会被盗,而是选择

来自分类Dev

UWP CalendarView调整大小后会更改一年

来自分类Dev

调整图像大小而不会失真

来自分类Dev

取消动画播放期间的点击触发

来自分类Dev

参考向量和调整大小的能力

来自分类Dev

在插入期间调整家庭实例的大小

Related 相关文章

  1. 1

    C4Shape的子类不会与实例方法成为一行

  2. 2

    调整图像大小而不会丢失信息

  3. 3

    jQuery窗口调整大小不会触发

  4. 4

    调整照片的大小而不会丢失CodenameOne中的正确大小

  5. 5

    使用AutoLayout调整圆形(圆形)UIView的大小...在调整大小的动画期间如何为cornerRadius设置动画?

  6. 6

    Facebook图像调整大小而不会丢失其比例

  7. 7

    使用fdisk调整分区大小而不会丢失数据

  8. 8

    Android 动画视图不会调整其他视图的大小

  9. 9

    在调整窗口大小之前,jQuery函数不会触发

  10. 10

    在重新调整窗口大小之前,不会触发砌体布局

  11. 11

    Onresize 不会在调整大小时触发

  12. 12

    基本动画不会触发

  13. 13

    基本动画不会触发

  14. 14

    将Javafx对象放入数组后会丢失参考的问题

  15. 15

    如何使用Magick ++调整大小和保存gif文件而不丢失动画

  16. 16

    调整大小而不会模糊

  17. 17

    调整浏览器窗口大小时,块元素变大并且不会垂直居中

  18. 18

    调整PNG图像的大小,而不会丢失来自完全透明像素的颜色数据

  19. 19

    通过切换布局触发的动画UICollectionView单元格调整大小

  20. 20

    用动画调整jPanels的大小

  21. 21

    为什么“ orientationchange”事件不会在浏览器调整大小时触发?

  22. 22

    JS不会触发CSS动画

  23. 23

    在QStatusBar调整大小期间防止窗口调整大小

  24. 24

    CSS:调整大小后会被盗,而是选择

  25. 25

    UWP CalendarView调整大小后会更改一年

  26. 26

    调整图像大小而不会失真

  27. 27

    取消动画播放期间的点击触发

  28. 28

    参考向量和调整大小的能力

  29. 29

    在插入期间调整家庭实例的大小

热门标签

归档