2017-01-02 83 views
2

我在IOS初學者,我想通過旋轉iPhone來改變圖像的不透明度並實時顯示在視圖中它如何更改圖像透明度實時在IOS

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 


- (void)viewDidLoad { 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
self.motionManager = [[CMMotionManager alloc]init]; 
self.motionManager.accelerometerUpdateInterval = 0.1; 
if([self.motionManager isAccelerometerAvailable]){ 

    [self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error){ 
     if(error){ 
      [self.motionManager stopAccelerometerUpdates]; 
     }else{ 

      accX = floor(accelerometerData.acceleration.x * 100)/100; 
      accY = floor(accelerometerData.acceleration.y * 100)/100; 
      accZ = floor(accelerometerData.acceleration.z * 100)/100; 
      NSLog(@"x = %f", accX); 
      NSLog(@"y = %f", accY); 
      NSLog(@"z = %f", accZ); 

     } 
    }]; 
}else{ 
    NSLog(@"Gyroscope is not available."); 
} 
NSBundle *bundle = [NSBundle mainBundle]; 
self.solder = [[UIImage alloc]initWithContentsOfFile:[bundle  
pathForResource:@"solder" ofType:@"jpg"]]; 
self.woman= [[UIImage alloc]initWithContentsOfFile:[bundle 
pathForResource:@"woman" ofType:@"jpg"]]; 

    self.solderImage.alpha = accX; 

    self.solderImage.image = self.solder; 


} 


- (void)didReceiveMemoryWarning { 
[super didReceiveMemoryWarning]; 
[self.motionManager stopGyroUpdates]; 
// Dispose of any resources that can be recreated. 
} 

@end 

我從iphone獲得了加速度計值,並使用它來更改圖像的不透明度,但無法實時顯示結果,我該如何操作?

回答

1

問題是在後臺線程上調用startAccelerometerUpdatesToQueue:withHandler的處理程序塊,並禁止在後臺線程上進行UI更改,並且會導致未定義的行爲。

一個解決方案是更新調度塊內的阿爾法:

accX = floor(accelerometerData.acceleration.x * 100)/100; 
accY = floor(accelerometerData.acceleration.y * 100)/100; 
accZ = floor(accelerometerData.acceleration.z * 100)/100; 

dispatch_async(dispatch_get_main_queue(), ^{ 
    self.solderImage.alpha = accX; 
}); 

甲調度塊增加了塊內的指令,以在主線程隊列中。這樣,它將在主線程上運行,任何UI更改都能正常工作。

+0

它真的工作!謝謝! –