簡體   English   中英

搖動手勢可在模擬器上使用,但不適用於iPhone

[英]Shake gesture works on simulator, but not iPhone

我的應用程序中有一些代碼可用來檢測抖動,一旦設備抖動,背景圖片就會發生變化,屏幕上的某些元素被隱藏,而另一些則未被隱藏。 如果再次搖動它,它會返回到原始顯示...這在模擬器上可以完美運行,但在我的實際iPhone 5S上卻根本不起作用!

如果搖動iPhone,我會看到更改閃爍,但是不到一秒鍾便返回到原始視圖。 這是我的代碼:

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (motion == UIEventSubtypeMotionShake)
{
    UIImage *iPhone5backgroundDO = [UIImage imageNamed:@"image1.png"];
    UIImage *iPhone4backgroundDO = [UIImage imageNamed:@"image2.png"];
    UIImage *iPhone5background = [UIImage imageNamed:@"image3.png"];
    UIImage *iPhone4background = [UIImage imageNamed:@"image4.png"];

    if (_backgroundImage.image == iPhone5background) {
        [UIView animateWithDuration:0.5 animations:^(void) {
            self.backgroundImage.image = iPhone5backgroundDO;
            _yearsOut.alpha = 0.0;
            _yearsLabel.alpha = 0.0;
            _monthsOut.alpha = 0.0;
            _monthsLabel.alpha = 0.0;
            _daysOut.alpha = 0.0;
            _hoursOut.alpha = 0.0;
            _minsOut.alpha = 0.0;
            _secsOut.alpha = 0.0;
            _daysOnlyOut.alpha = 1.0;
            _daysLabel.frame = CGRectMake(139, 273, 42, 21);
            _hoursOutDO.alpha = 1.0;
            _hoursLabel.frame = CGRectMake(41, 374, 52, 21);
            _minsOutDO.alpha = 1.0;
            _minsLabel.frame = CGRectMake(126, 374, 66, 21);
            _secsOutDO.alpha = 1.0;
            _secsLabel.frame = CGRectMake(212, 374, 71, 21);
        }];
    } if (_backgroundImage.image == iPhone5backgroundDO) {
        [UIView animateWithDuration:0.5 animations:^(void) {
            self.backgroundImage.image = iPhone5background;
            _yearsOut.alpha = 1.0;
            _yearsLabel.alpha = 1.0;
            _monthsOut.alpha = 1.0;
            _monthsLabel.alpha = 1.0;
            _daysOut.alpha = 1.0;
            _hoursOut.alpha = 1.0;
            _minsOut.alpha = 1.0;
            _secsOut.alpha = 1.0;
            _daysOnlyOut.alpha = 0.0;
            _daysLabel.frame = CGRectMake(226, 331, 42, 21);
            _hoursOutDO.alpha = 0.0;
            _hoursLabel.frame = CGRectMake(45, 457, 52, 21);
            _minsOutDO.alpha = 0.0;
            _minsLabel.frame = CGRectMake(125, 457, 66, 21);
            _secsOutDO.alpha = 0.0;
            _secsLabel.frame = CGRectMake(210, 457, 71, 21);
        }];
    } if (_backgroundImage.image == iPhone4background) {
        [UIView animateWithDuration:0.5 animations:^(void) {
            self.backgroundImage.image = iPhone4backgroundDO;
            _yearsOut.alpha = 0.0;
            _yearsLabel.alpha = 0.0;
            _monthsOut.alpha = 0.0;
            _monthsLabel.alpha = 0.0;
            _daysOut.alpha = 0.0;
            _hoursOut.alpha = 0.0;
            _minsOut.alpha = 0.0;
            _secsOut.alpha = 0.0;
            _daysOnlyOut.alpha = 1.0;
            _daysLabel.frame = CGRectMake(139, 273, 42, 21);
            _hoursOutDO.alpha = 1.0;
            _hoursLabel.frame = CGRectMake(43, 374, 52, 21);
            _minsOutDO.alpha = 1.0;
            _minsLabel.frame = CGRectMake(127, 374, 66, 21);
            _secsOutDO.alpha = 1.0;
            _secsLabel.frame = CGRectMake(213, 374, 71, 21);
        }];
    } else if (_backgroundImage.image == iPhone4backgroundDO) {
        [UIView animateWithDuration:0.5 animations:^(void) {
            self.backgroundImage.image = iPhone4background;
            _yearsOut.alpha = 1.0;
            _yearsLabel.alpha = 1.0;
            _monthsOut.alpha = 1.0;
            _monthsLabel.alpha = 1.0;
            _daysOut.alpha = 1.0;
            _hoursOut.alpha = 1.0;
            _minsOut.alpha = 1.0;
            _secsOut.alpha = 1.0;
            _daysOnlyOut.alpha = 0.0;
            _daysLabel.frame = CGRectMake(212, 271, 45, 21);
            _hoursOutDO.alpha = 0.0;
            _hoursLabel.frame = CGRectMake(57, 371, 49, 21);
            _minsOutDO.alpha = 0.0;
            _minsLabel.frame = CGRectMake(122, 371, 66, 21);
            _secsOutDO.alpha = 0.0;
            _secsLabel.frame = CGRectMake(198, 371, 71, 21);
        }];
    }
}
} 

這是我的代碼有問題嗎? 還是我只是試圖做一些不可能的事情?

好的-在每次搖動和檢測時,我都在其中扔了幾個NSLogs,解決了問題是當第一個if語句為true時第二個if語句為true時,然后立即運行! 所以我將if改為else if的排序方式-模擬器正在運行,因為我使用的是3.5“ sim卡,它已經具有else-if語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM