- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
附加代码有两个问题。
首先,如果我将形状的动画持续时间设置为 1 秒,以便形状始终移动,则 touchesBegan 不会触发。当我查看 C4View.m
时,似乎未设置 UIViewAnimationOptionAllowUserInteraction
。有没有办法让我可以访问 UIView
来设置这个选项?看来不重写C4View
会很困难。
其次,每次点击形状时我都希望它缩小一点。我遇到的问题是,在我第一次击中它后它停止移动。经过一些挖掘后,似乎 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>>
首先将 shape 设置为 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
最佳答案
C4Control/C4View/C4Window
都有一个动画选项,允许用户在动画期间进行交互。它是 C4AnimationOptions
结构的一部分,可以在 C4Defines.h
中找到。
确保在开始动画之前调用它。
shape.animationOptions = ALLOWSINTERACTION;
而且,就像其他选项一样,它可以被位掩码:
shape.animationOptions = EASEOUT |自动反转 |允许交互;
(您不必返工 C4View!)
要更改形状的大小,您需要像这样调用形状本身的方法:
[shape ellipse:r];
以下...
shape = [C4Shape 椭圆:r];
...由于 3 个原因无法工作:
C4Shape
,您实际上是在创建一个新对象,不会影响已经存在的对象shape = [...];
,您可以将指针从原始形状更改为刚创建的新形状以下代码是我对您上面的代码的修改版本:
#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
关于iphone - touchesBegan 在动画期间不触发,C4Shape 在调整大小后失去引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19094936/
我正在编写一个 ipad 应用程序,您可以用 1 或 2 个手指在屏幕上拖动。我使用 touchesBegan、touchesMoved 和 touchesEnded 方法来识别触摸。我为 View
我的代码: var location = CGPoint(x:0,y:0) override func touchesBegan(touches: Set, withEvent event: UIEv
我正在尝试在我的 GameScene 中实现 ccTouchesBegan。 我已设置 isTouchEnabled = YES。我还在 touchDispatcher 上调用了 addStandar
我有以下代码可以在用户点击 View 时隐藏键盘,但 TouchBegan 根本不会触发: class LoginViewController: UIViewController, UITextFie
我有一个奇怪的问题,touchesBegan 处理程序被多次调用。如果我快速点击 UIView (UIButton) 2 次,touchesBegan 被调用 3 次。 我通过简单的时间测量解决了这个
所以问题是,当我启动它时,soundOff 按钮位于 soundOn 上方,但它是不可见的。所以我只看到了 soundOn 按钮,当我尝试点击 soundOn 按钮时,它实际上只是点击了 soundO
我有一个函数,每 2 秒被重复调用一次,每次从屏幕顶部带来一个具有随机纹理的球。我希望能够在 touchesBegan 中使用这个球,但我不能,因为它是一个局部变量。我试过将它设为全局变量,但这给了我
我正在尝试为我的应用程序弹出一个弹出窗口。到目前为止,弹出窗口在固定坐标处弹出,我试图让它在用户点击的位置弹出。这是我的: override func touchesBegan(touches: Se
// // CommentViewController.swift // Bordy // // Created by Micheal Tyler on 9/22/17. // Copyrig
是否可以在项目中的多个位置或对象中使用 touchesBegan 方法? 例如,如果我有一个带有两个按钮的主类: class GameScene: SKScene, SKPhysicsContactD
我正在尝试检测一个节点是否是敌人。如果是,我想删除它。我正在尝试使用 touched nodes 名称来检测这一点。我能够检测到节点的名称是否为敌人,但我不知道如何删除它。谢谢您的帮助! :) 这里是
我正在使用 UIPicker 来填充 UITextField 而不是键盘。这很好用,但我现在无法关闭 UIPicker。我希望能够点击屏幕上的任意位置并关闭 UIPicker。我已经尝试了每种触摸方法
我正在使用 NSTimer 构建一个旋转横幅来跟踪当前图像,该图像由 5 个不同的图像制成动画。我有一个 touchesBegan 设置,如果有人点击它,可以继续处理横幅上的触摸事件。我的概念验证有效
我目前正在使用 swift 开发一个 iOS 应用程序。我使用 override 编写了我自己的 tocuhesBegan 和 tochesEnded 函数。现在,当我使用 self.button 时
我的 Storyboard看起来像这样: Controller top/bottom layout guide view UIview UIBu
我想使用 touchesBegan 方法来了解用户何时在我的 TableView 中的 UITextField 之外点击。 我有一个包含 TableView 的 UIView,我有以下方法: - (v
touchesBegan: withEvent: / touchesMoved: withEvent: / touchesEnded: withEvent: 等只能被UIView捕获(如有问题请指出
我有一个文本字段,当我触摸屏幕上的其他位置时,它会隐藏键盘(通过我的 TouchesBegan 函数并辞职......等等)。但是当我触摸 Textview 时,TouchesBegan 不会被调用,
我想检测何时触摸其他地方而不是特定的 UIView 。我正在使用touchesBegan然而,对于它,它总是打印“触摸在外面”(参见下面的代码)。我错过了什么? 我从中得到了帮助post . over
我的 SKScene 有 1 个空节点 (buttonsGroup)。在我的 GameView 类中,我创建一个节点 (ball1),它是空节点的父节点。 buttonsGroup = chi
我是一名优秀的程序员,十分优秀!