手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

uipickerview 学习中遇到的问题点滴

首页 > 苹果相关 >

 几个小问题,是在看《精通IOS开发》第六版第七章遇到的

7.8章节:使用自定议选取器创建一个简单游戏

1、P 159 书上写着:添加一个选取器视图,在选取器视图下方添加一个分页

     妹啊,这个分页究竟是什么?开始以为是pagecontrol组件,但看完本章后才发现,这就是一个Label,为什么前后翻译 会不一样??

2、P159最后一段:需要取消选择View设置底部的User Interaction Enabled,这样用户就不能够手动更改刻度盘作弊了

    我擦 ,我把View设置的User Interaction Enabled 的勾取消后,整个页面的button,label什么的全部没有事件了。

    明明只是将pickerview的user interaction enabled的勾取消么,害我浪费了2个小时,我一直在编译、改代码就是想处理为什么我的button不能点击了,点击了之后为什么没反应

3、例程中:

XML/HTML代码
  1. //当然 self.images 是 NSArray  
  2. self.images = @[[UIImage imageNamed:@"seven"] , [UIImage imageNamed:@"apple"]];  

 

但是如果纯粹翻译成swift这是错误的

大小: 36.74 K
尺寸: 500 x 89
浏览: 2071 次
点击打开新窗口浏览全图

最后我改成了:

XML/HTML代码
  1. self.images = ["seven","bar","crown","cherry","lemon","apple"]  

 

然后在调用的时候再创建UIImage,比如:

XML/HTML代码
  1. func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView {  
  2.       
  3.     var img = self.images?[row] as String ;  
  4.     return  UIImageView(image: UIImage(named: img));  
  5. }  

 

这也算是曲线救国吧,等下次学的深的时候再来看一下这个问题

4、声音

原文中,#import <AudioToolbox/AudioToolbox.h>在swift中就方便了,直接 import AutioToolbox

不过读取声音资源的时候也确实不一样

XML/HTML代码
  1. //.h  
  2. @implementation xxxController{  
  3.     SystemSoundID xxxSoundId  
  4. }  
  5. //.m  
  6. if (xxxSoundId == 0) {  
  7.     NSString *path = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"wav"];  
  8.     NSURL *soundURL = [NSURL fileURLWithPath:path];  
  9.     AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL , &xxxSoundId );  
  10. }  
  11. //然后就可以播放了  
  12. AudioServicePlaySystemSound(xxxSoundId);  

 

在swift中就不能这么写了。首先,没看到有(__bridge CFURLRef),经过google,我找到了这里:http://stackoverflow.com/questions/24043904/creating-and-playing-a-sound-in-swift,有很多人回答了,有人说flappyswift中有人这样用:

XML/HTML代码
  1. import SpriteKit  
  2. import AVFoundation  
  3.   
  4. class GameScene: SKScene {  
  5.   
  6.     // Grab the path, make sure to add it to your project!  
  7.     var coinSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("coin", ofType: "wav"))  
  8.     var audioPlayer = AVAudioPlayer()  
  9.   
  10.     // Initial setup  
  11.     override func didMoveToView(view: SKView) {  
  12.         audioPlayer = AVAudioPlayer(contentsOfURL: coinSound, error: nil)  
  13.         audioPlayer.prepareToPlay()  
  14.     }  
  15.   
  16.     // Trigger the sound effect when the player grabs the coin  
  17.     func didBeginContact(contact: SKPhysicsContact!) {  
  18.         audioPlayer.play()  
  19.     }  
  20.   
  21. }  

 

也有人提了个主意,但是说新版的xcode已经不能用了。最后有人贴了段代码:

XML/HTML代码
  1. import AudioToolbox  
  2.   
  3. let chaChingSound: SystemSoundID = createChaChingSound()  
  4.   
  5. class CashRegisterViewController: UIViewController {  
  6.     override func viewWillAppear(animated: Bool) {  
  7.         super.viewWillAppear(animated)  
  8.         AudioServicesPlaySystemSound(chaChingSound)  
  9.     }  
  10. }  
  11.   
  12. func createChaChingSound() -> SystemSoundID {  
  13.     var soundID: SystemSoundID = 0  
  14.     let soundURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), "Cha-Ching", "aiff", nil)  
  15.     AudioServicesCreateSystemSoundID(soundURL, &soundID)  
  16.     CFRelease(soundURL)  //新版xocde已经不要这一句了,提示自动管理内存,不要你主动释放了
  17.     return soundID  
  18. }  

 

嗯,我就是用的这个。

5、[sef performSelector]

标题的这个方法,在swift中已经没有了,那怎么延迟0.5秒呢?stackoverflow上也有答案:http://stackoverflow.com/questions/24170282/swift-performselector-withobject-afterdelay

最简单的就是:

XML/HTML代码
  1. var timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("someSelector"), userInfo: nil, repeats: false)  
  2.   
  3. func someSelector() {  
  4.     // Something after a delay  
  5. }  

 

或者 :

XML/HTML代码
  1. dispatch_after(0.1, dispatch_get_main_queue(), {  
  2.     // your function here  
  3. })  

 

---至此,第7章全部看完。

整个第一章就一个Tabbar和pickerview加datepickerview,却有这么多的问题,而且还有一个就是pickerview中的数据怎么循环?暂时还没有仔细的了解 ,先把整本书读完试试

 

 




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):