Thursday, May 21, 2015

swift: Using UIApplication Subclass in main.m

Make the swift class like this

import UIKit
import Foundation
@objc(MyTest2) class MyTest2: UIApplication
{
    
    
  
    

}

and modify the main.m
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "test3-swift.h"  //test3 is the project name, not a real file in project
int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, NSStringFromClass([MyTest2 class]), NSStringFromClass([AppDelegate class]));
    }
}

Thursday, April 30, 2015

Swift: conditional unwrapping, checking error is nil or not

var error: NSError?

// now use error in functions like
audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.None, error: &error)

//and now conditional unwrapped

 if let routeChangeError = error {
            NSLog("error %@",routeChangeError)
  }

Tuesday, April 28, 2015

Swift: changing AVAudioSession route (voice from speaker to headphone and vice versa)

 NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleAVAudioSessionRouteChange:", name: AVAudioSessionRouteChangeNotification, object: nil)



@objc private func handleAVAudioSessionRouteChange(notification : NSNotification) {
        
        println("change route \(notification.userInfo)")
        let audioSession = AVAudioSession.sharedInstance()
        var error : NSError?
        let audioRouteChangeReason = notification.userInfo![AVAudioSessionRouteChangeReasonKey] as UInt
        
        switch audioRouteChangeReason {
        case AVAudioSessionRouteChangeReason.NewDeviceAvailable.rawValue:
            println("headphone plugged in")
        audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.None, error: &error)
        case AVAudioSessionRouteChangeReason.OldDeviceUnavailable.rawValue:
            println("headphone pulled out")
            audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker, error: &error)
        default:
            break
        }

    }

Monday, April 27, 2015

Swift NSUserDefault

setting  
NSUserDefaults.standardUserDefaults().setObject(myvalue, forKey: "mykey")
        NSUserDefaults.standardUserDefaults().synchronize()


reading

Swift
1
2
3
4
5
let defaults = NSUserDefaults.standardUserDefaults()
if let name = defaults.stringForKey("myKey")
{
    println(name)
}
stringForKey
IntegerForKey
ObjectForKey 

use based on requirements 

swift - Function with parameter and return value

  • func sayHello(personName: String) -> String {
  • let greeting = "Hello, " + personName + "!"
  • return greeting
  • }

Friday, April 24, 2015

objective-c gesture recognizer calling multiple time till state end

In viewdidLoad

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
    longPress.minimumPressDuration=1.0f;

    [self.deleteDigitButton addGestureRecognizer:longPress];


Long press button
timer is being used to call itself through longPress timer function

- (void)longPress:(UILongPressGestureRecognizer*)gesture {
    
    if( gesture.state == UIGestureRecognizerStateBegan ) {
        NSLog(@"DialerViewController.Long Press");
        
        NSString *digits = [PhoneNumberFormatter unformat: self.TextField.text];
        if(digits.length > 0 && (gesture.state != UIGestureRecognizerStateEnded || gesture.state != UIGestureRecognizerStateCancelled || gesture.state != UIGestureRecognizerStateFailed)) {
            digits = [digits substringToIndex:digits.length - 1];
            self.TextField.text = [PhoneNumberFormatter format:digits];
            [self.TextField setNeedsDisplay];
            
            NSTimeInterval timeInterval = 0.1; //seconds
            [NSTimer scheduledTimerWithTimeInterval:timeInterval
                                             target:self
                                           selector:@selector(longPressTimer:)
                                           userInfo:gesture
                                           repeats:NO];
            
        }
    }
}

longPressTimer function
-(void)longPressTimer:(NSTimer *)timer{
    UILongPressGestureRecognizer *gesture = [timer userInfo];
    [self longPress:gesture];
}