我有同样的问题,如本问题所述:
我在哪里可以将我的应用程序使用的窗口从UIWindow更改为我自己的子类"MyWindow"和storyboard?
我的问题是如何在我的app委托中实现一个'window'getter方法,返回'MyWindow'子类?或者也许有其他方法可以将我的子类分配到我的应用程序的主窗口?
我将以下代码添加到appDelegate.m中
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (motion == UIEventSubtypeMotionShake )
{
// User was shaking the device. Post a notification named "shake".
[[NSNotificationCenter defaultCenter] postNotificationName:@"shake" object:self];
}
}
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
}
- (void)shakeSuccess
{
// do something...
}
Run Code Online (Sandbox Code Playgroud)
然后我补充说:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
// INIT THE BACKGROUND PATH STRING
[self refreshFields];
[self.window addSubview:navController.view];
[self.window makeKeyAndVisible];
***[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shakeSuccess) name:@"shake" …Run Code Online (Sandbox Code Playgroud) 我需要检测陀螺仪/加速度计何时被激活一定量.基本上是检测设备何时移动.我对Core Motion一无所知.
也许有人可以指导我参加初学者教程或其他什么.
提前致谢.
在我的iPhone应用程序中,我使用摇动手势它正在工作,但需要付出很多努力才能动摇
有没有办法让它更敏感或提高灵敏度?
这是代码
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (motion == UIEventSubtypeMotionShake)
{
[self performSelector:@selector(startPressed:)];
}
}
Run Code Online (Sandbox Code Playgroud)
请帮忙和建议.
谢谢
如何在Swift中的AppDelegate(整个应用程序)中检测到设备震动?
我找到了解释如何在视图控制器中执行此操作的答案,但希望在我的应用程序中执行此操作.
我正试图在这个页面上实现摇动"教程",但我想我错过了一些东西.我将他的加速计功能复制到myAppViewController.m文件中并在其中放入一些nslog,以查看当我使用模拟器"摇动"功能时它是否进入该功能.调试控制台中没有显示任何内容.
http://mithin.in/2009/07/28/detecting-a-shake-using-iphone-sdk
任何人都可以解释我可能会缺少什么?还是指点教程?
我发现这看起来很有希望,但我不知道如何"把它放在一个UIView" 我如何检测有人摇动iPhone?
编辑 - 现在这是我的工作代码,因为接受了答案的建议.
这是我在3.0 iphone sdk中检测摇动手势的代码.
-(BOOL)canBecomeFirstResponder {
return YES;
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self becomeFirstResponder];
}
- (void)viewWillDisappear:(BOOL)animated {
[self resignFirstResponder];
[super viewWillDisappear:animated];
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
NSLog(@"{motion ended event ");
if (motion == UIEventSubtypeMotionShake) {
NSLog(@"{shaken state ");
}
else {
NSLog(@"{not shaken state ");
}
}
Run Code Online (Sandbox Code Playgroud) 我使用代码检测抖动和此代码在设备上工作,但当我在模拟器上使用摇动手势不起作用为什么?
我使用下面的代码来检测它
#define kAccelerationThreshold 2.2
#define kUpdateInterval (1.0f/10.0f)
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
if (fabsf(acceleration.x) > kAccelerationThreshold || fabsf(acceleration.y) > kAccelerationThreshold || fabsf(acceleration.z) > kAccelerationThreshold)
...
}
Run Code Online (Sandbox Code Playgroud) 我对之前发布的震动检测有疑问,这是一个提醒:
"现在......我想做类似的事情(在iPhone OS 3.0+中),只是在我的情况下我想在应用程序范围内,所以我可以在发生震动时提醒应用程序的各个部分.这就是我最终做的事情.
首先,我将UIWindow子类化.这很容易.使用MotionWindow:UIWindow等界面创建一个新的类文件(随意选择自己的,natch).添加如下方法:
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"DeviceShaken" object:self];
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果您使用MainWindow.xib(库存Xcode模板的东西),请进入并将Window对象的类从UIWindow更改为MotionWindow或您调用它的任何内容.保存xib.如果以编程方式设置UIWindow,请在那里使用新的Window类.
现在您的应用程序正在使用专门的UIWindow类.无论您想要被告知摇晃,请注册他们的通知!像这样:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(deviceShaken) name:@"DeviceShaken" object:nil];
Run Code Online (Sandbox Code Playgroud)
要以观察者身份移除自己:
[[NSNotificationCenter defaultCenter] removeObserver:self];
Run Code Online (Sandbox Code Playgroud)
问题:
谢谢.
据我所知,我的应用程序应该在我使用XCode中的iPad模拟器时触发加速度计事件,但事实并非如此.
我已经google了一下,似乎加速计没有在模拟器中实现,这是正确的吗?如果是这样,为什么他们会有一个"硬件 - >摇动手势"菜单选项?
我的代码如下:
.h文件:
@interface MyViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate, UIAccelerometerDelegate>{
UIAccelerometer *accelerometer;
//...other stuff
}
@property (nonatomic, retain) UIAccelerometer *accelerometer;
@end
Run Code Online (Sandbox Code Playgroud)
那么.m文件:
@implementation MyViewController
@synthesize accelerometer;
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
NSLog(@"%@", [NSString stringWithFormat:@"%@%f", @"X: ", acceleration.x]);
NSLog(@"%@", [NSString stringWithFormat:@"%@%f", @"Y: ", acceleration.y]);
NSLog(@"%@", [NSString stringWithFormat:@"%@%f", @"Z: ", acceleration.z]);
}
- (void)viewDidLoad {
[super viewDidLoad];
self.accelerometer = [UIAccelerometer sharedAccelerometer];
self.accelerometer.updateInterval = .1;
self.accelerometer.delegate = self;
}
@end
Run Code Online (Sandbox Code Playgroud)
这看起来不错吗?
我有一个视图控制器.它是由另一个人推动的UINavigationController.在ViewController.m中:
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (void)viewDidAppear:(BOOL)animated {
[self.view becomeFirstResponder];
NSLog(@"%d", [self.view isFirstResponder]);
[super viewDidAppear:animated];
}
Run Code Online (Sandbox Code Playgroud)
它总是0.为什么?
我正在实施此答案中描述的摇动手势,但如果我摇动手机的时间超过一秒钟,则无法调用motionEnded.
OS保证的motionBegan和motionEnded事件的比率是否为1比1,或者这是响应者链的问题,事件是否被发送到其他地方?
我想知道,如何实现抖动刷新功能.例如,Facebook应用程序,他们没有刷新按钮,在摇动手机时刷新数据.
我想将它包含在我的应用程序中.但我不知道这个功能的名称是什么以及如何实现它.
谁能帮我这个.
谢谢
我正在写一部iPhone相机应用程序.当用户即将拍照时,我想检查一下iPhone是否在摇晃并等待没有晃动的那一刻,然后抓住手机.
我该怎么做?
iphone ×10
ios ×5
objective-c ×5
shake ×4
cocoa-touch ×2
xcode ×2
appdelegate ×1
camera ×1
core-motion ×1
delegates ×1
ios4 ×1
ipad ×1
swift ×1
swift3 ×1
uiwindow ×1