- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为 UIView
(基于 block 的动画)制作动画,但我无法使计时正常工作(持续时间等)。动画运行,因为更改已完成,并显示完成输出消息,但它只是忽略持续时间并立即进行更改。
我假设我做事的方式有问题,但我就是想不出错误在哪里。让我解释一下我要做什么:
我有一个 UIViewController
(viewcontroller),它处理 UIView
子类的两个对象(view1 和 view2),我在其中定义了 touchesEnded
方法。
想法是当 view1 被触摸时,我想为 view2 设置动画。所以我所做的是在UIView
子类中实现一个动画方法,在touchesEnded
方法中实现一个通知(也在UIView
子类中),和 Controller 中的触发方法将调用第二个 View 的动画。像这样:
// In the UIView subclass:
- (void) myAnimation{
[UIView animateWithDuration:2.0
delay:0.0
options: UIViewAnimationCurveEaseOut
animations:^{
self.alpha = 0.5;
}
completion:^(BOOL finished){
NSLog(@"Done!");
}];
}
// In the UIView subclass:
- (void) touchesEnded: (NSSet*) touches withEvent: (UIEvent*) event {
[pParent viewHasBeenTouched]; // pParent is a reference to the controller
}
// In the UIViewController:
- (void) viewHasBeenTouched {
[view2 myAnimation];
}
(动画和工作流程其实有点复杂,但是这个简单的例子就是不行)
如果我将动画放在其他地方,它可能会起作用,例如在 Controller 的 init 方法中初始化 View 之后。但是如果我尝试进行这种前后调用,动画将忽略持续时间并一步执行。
有什么想法吗?关于我应该知道的触摸和手势,我错过了什么?谢谢。
添加到原始帖子的新信息:
AppDelegate 除了这个什么都不做:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[TestViewController alloc] init];
self.window.rootViewController = self.viewController;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
TestViewControler.h 就是这样的:
#import <UIKit/UIKit.h>
#import "TestView.h"
@interface TestViewController : UIViewController{
TestView* myView;
}
- (void) viewHasBeenTouched;
@end
而 viewDidLoad 只做这个:
- (void)viewDidLoad{
[super viewDidLoad];
myView = [[TestView alloc] initWithParent:self];
[self.view addSubview:myView];
}
最后,UIView 有一个 TestView.h,如下所示:
#import <UIKit/UIKit.h>
@class TestViewController; // Forward declaration
@interface TestView : UIView{
TestViewController* pParent;
}
- (id)initWithParent:(TestViewController*) parent;
- (void) myAnimation;
@end
并且使用的init方法是:
- (id)initWithParent:(TestViewController *)parent{
CGRect frame = CGRectMake(50, 20, 100, 200);
self = [super initWithFrame:frame];
if (self) pParent = parent;
self.backgroundColor = [UIColor blueColor];
return self;
}
所以...使用我发布的这个简单代码,错误发生了。正如我所说,动画确实改变了 alpha,但没有延迟或计时。这只是瞬间的。对这些附加信息有什么想法吗?
再次感谢您的帮助。
最佳答案
我发现了问题。我想首先向所有研究我的问题并为此浪费宝贵时间的人致歉。
我在原始问题中发布的所有第二部分确实是复制和粘贴的,这是第一部分有这两个不匹配的错误,因为它们来自更复杂的代码。正如你们所说,该代码可以正常工作。问题是我没有复制并粘贴我认为已从项目中删除的方法(在应用程序开始时调用):
- (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOrientation {
// ... More code
[UIView setAnimationsEnabled:NO];
// ... More code
return YES;
}
显然不需要进一步解释。
再次非常感谢您抽出宝贵时间,并向您致以诚挚的歉意。
关于ios - 在 touchesEnded 事件上为 UIView 设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9462805/
在我的应用程序中,我有一个 UIView 并排有两个 UITableView。位于这些之上的是一个 UIView(全部在 Storyboard中完成)。 它被设置为通过附加到顶部 UIView、DnD
我在我的 UIView 中实现了以下事件处理程序: - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]
当玩家按住按钮四处移动然后按下射击按钮时,会调用 TouchesEnded,然后取消玩家的移动。这两个操作单独工作,但当它们同时被调用时则不会。 override func touchesBegan(
我正在我的 iOS 应用程序中实现 touchesBegan 和 touchesEnded,试图检测用户何时将手指放在屏幕上以及何时松开。 我遇到的问题是,一旦 touchesBegan 被调用,如果
我正在尝试让 touchesEnded 在一个手势后触发。我包含了一个代码片段,其中可以触发 touchesBegan 和 touchesEnded。我用下面的代码得到了两个奇怪的行为。当我平移时,它
很抱歉让我感到尴尬,但请问我能否获得有关如何执行此操作的完整代码: 我希望在我的游戏中每发射一颗子弹后延迟 1 秒,以防止子弹垃圾邮件。如果可能的话,不要像我在 touchesEnded 中那样为子弹
当我调用 touchesBegan() 时 override func touchesBegan(touches: Set, withEvent event: UIEvent?) {
我有一个子类 UIView 的自定义 View 。它有一个 touchesEnded 事件,但是它没有显示在 Interface Builder 中(在事件下)。我想知道如何将该方法放入我的 View
如果我用两根手指点击屏幕太快,touchesBegan被调用,但 touchesEnded不要求其中之一。 我疯狂地用谷歌搜索,这似乎是人们至少从 2010 年以来一直存在的一个严重问题。显然它还没有
我正在使用下面的代码来尝试获取触摸的位置,但它只能在按钮之外使用。例如。如果触摸在按钮之外,它会打印控制台行,但如果不是,它就不起作用。什么是解决方案?这是代码: - (void)touche
我正在构建一个 iOS 绘图应用程序,我正在尝试实现一个撤消按钮来删除用户绘制的线条。我在变量中创建了一个图像数组: var images = [UIImage]() 每次用户在屏幕上滑动和移开手指时
在我的 Storyboard中,我有一些图像是“启用用户交互”的。在 UIViewController 中,我覆盖了 touchesEnded 函数。 override func touchesEnd
我正在使用 spritekit 制作游戏,触摸开始和触摸结束之间有明显的 100-200 毫秒延迟。 有什么办法可以加快速度吗?我需要使用 touches ended(计算用户触摸的起点和终点之间的矢
代码将返回 x1 和 y1 值,但似乎并没有通过 touchesEnded 函数运行。我的目标是创建一个矩形,从用户触摸的角开始,到用户抬起手指的地方结束。 //touch i
我有一个带有主菜单的 SpriteKit 游戏。菜单标签在 touchesEnded 上触发。这在第一次启动游戏时工作正常。 然后,第一关结束后,再次呈现主菜单。这次没有触发touchesEnded!
我有一段简单的代码,其中覆盖了 touchesBegan、Ended、Cancelled(empty block) 和 touchesMoved。如果我用鼠标单击(我在台式电脑上测试) touches
好的-所以我有一个子类 UIView 的应用程序,并依赖于 touchesBegan 和 touchesEnded。我当然指的是这些回调: - (void)touchesBegan:(NSSet *)
我正在为 iOS 开发一个应用程序,我希望用户能够在屏幕上选择一些东西,然后在选择结束时能够按住手指一秒钟,以触发其他一些东西事件。 我已经创建了很多 Action ,用于当用户通过四处滑动来标记内容
我有一个 UIView 子类,我在其中使用 touchesBegan、touchesMoved、touchesEnded 处理触摸。我注意到当我在内部开始触摸然后拖动到 UIView 外部时 touc
我有一个名为“MyView”的 UIView 子类。在ControllerA中,它有一个属性MyView *myView,并将其添加到self.view中。在myView上,有一些随机的 subvie
我是一名优秀的程序员,十分优秀!