AVPlayer – looping video without “hiccup”/delays

I tried create loop by AVQueuePlayer, this method has delays between end and start play.

for looping AVQueuePlayer i use this code:

1
2
3
4
5
6
[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playerItemDidReachEnd:)
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:self.mPlayerItem];
     
    [self player].actionAtItemEnd = AVPlayerActionAtItemEndNone;

and playerItemDidReachEnd

1
2
3
4
5
- (void)playerItemDidReachEnd:(NSNotification *)notification
{
    AVPlayerItem *p = [notification object];
    [p seekToTime:kCMTimeZero];
}

Another solution without hiccups/delays based on AVMutableComposition!
Continue reading

Posted in Apple, iPad, iPhone, Mac OS X
Tagged AVFoundation, AVMutableComposition, AVPlayer, AVPlayerActionAtItemEndNone, AVPlayerItem, AVPlayerLayer, AVQueuePlayer, AVURLAsset, , NSNotificationCenter
3 Comments

AudioSession AudioRouteChange

if you will use or used AVPlayer or you want just know about changes, you can check AudioRouteChange.

Simple solution:

Add framework AudioToolbox and add import to file

1
#import

Insert into init method or any other

1
AudioSessionAddPropertyListener (kAudioSessionProperty_AudioRouteChange, callbackHeadphone_func, self);

Listener callback

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void callbackHeadphone_func ( void *inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData ) {
    if ( inID == kAudioSessionProperty_AudioRouteChange ) {
        [mainViewController performSelector:@selector(isHeadsetPluggedIn)];
    }
}


- (void) isHeadsetPluggedIn {
   
    UInt32 routeSize = sizeof (CFStringRef); CFStringRef route;
   
    AudioSessionGetProperty (kAudioSessionProperty_AudioRoute, &routeSize, &route);
      /* Known values of route:
     "Headset"
     "Headphone"
     "Speaker"
     "SpeakerAndMicrophone"
     "HeadphonesAndMicrophone"
     "HeadsetInOut"
     "ReceiverAndMicrophone"
     "Lineout" */

   
    NSString* routeStr = (NSString*)route;
    DLog(@"%@",routeStr);
}
Posted in iPad, iPhone, Mac OS X
Tagged AudioSessionAddPropertyListener, AudioToolbox, , kAudioSessionProperty_AudioRouteChange

Sorting by block

Sorting by block

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
NSArray *stringsArray = [NSArray arrayWithObjects:
                                 @"string 1",
                                 @"String 21",
                                 @"string 12",
                                 @"String 11",
                                 @"String 02", nil];
 
static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch |
        NSWidthInsensitiveSearch | NSForcedOrderingSearch;
NSLocale *currentLocale = [NSLocale currentLocale];
 
NSComparator finderSortBlock = ^(id string1, id string2) {
 
    NSRange string1Range = NSMakeRange(0, [string1 length]);
    return [string1 compare:string2 options:comparisonOptions range:string1Range locale:currentLocale];
};
 
NSArray *finderSortArray = [stringsArray sortedArrayUsingComparator:finderSortBlock];
NSLog(@"finderSortArray: %@", finderSortArray);

Result:
/*
Output:
finderSortArray: (
“string 1″,
“String 02″,
“String 11″,
“string 12″,
“String 21″
)
*/

Assistive Touch в iOS 5 beta 3

В новой бета-версии прошивки iOS 5, которую Apple выпустили сегодня, они активировали новую функцию под названием «Assistive Touch». Это было и в прошлых бетах, но активировать их можно только сейчас. Новая функция призвана принести немного больше возможностей для тех, кто испытывает проблемы с использованием традиционных жестов.

Assistive Touch активируется при нажатии на заранее указанный угол.

Далее скриншоты и видео
Continue reading

How to include ttf fonts to iOS app

Up till now there hasn’t been an easy way to add custom fonts to your iPhone applications. As of iOS 4 it has become very easy to do. Here is what you need to do in order to add custom fonts:

  1. Add your custom font files into your project using XCode as a resource
  2. Add a key to your info.plist file called UIAppFonts.
  3. Make this key an array
  4. For each font you have, enter the full name of your font file (including the extension) as items to the UIAppFonts array
  5. Save info.plist
  6. Now in your application you can simply call [UIFont fontWithName:@"CustomFontName" size:12] to get the custom font to use with your UILabels and UITextViews, etc…

OR

add your font to your project and next function, and perform from start.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#import

// includer for font
NSUInteger loadFonts( )
{
     NSUInteger newFontCount = 0;
     NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"];
     const char *frameworkPath = [[frameworkBundle executablePath] UTF8String];
     
     if (frameworkPath)
     {
          void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY);
         
          if (graphicsServices)
          {
               BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices, "GSFontAddFromFile");
               
               if (GSFontAddFromFile)
               {
                   
                    BOOL verizon = NO;
                   
                    NSLog(@"%@",[[UIDevice currentDevice] machine]);
                   
                    if ([[[UIDevice currentDevice] machine] rangeOfString:@"iPhone3,3"].location != NSNotFound) {
                         verizon = YES;
                    }
                   
                    for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
                    {
                         if ([fontFile rangeOfString:@"_"].location != NSNotFound && verizon) {
                              newFontCount += GSFontAddFromFile([fontFile UTF8String]);
                         }
                         
                         if ([fontFile rangeOfString:@"-"].location != NSNotFound && !verizon) {
                              newFontCount += GSFontAddFromFile([fontFile UTF8String]);
                         }

                    }
               }
          }
     }
     
     return newFontCount;
}

It’s that simple!

Adding SVN revision to Xcode project

Просмотр ревизии в самом приложении предотвращает путаницу и всякие проблемы с отслеживанием текущей версии.

Чтоб отслеживать версию репозитория нам нужно добавить слдеющий код bash скрипта.

1
2
3
4
5
6
7
8
9
10
REVISION=`svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
APPVERSION=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}`

xported="xported"

if [ $APPVERSION != $xported ]; then
     /usr/libexec/PlistBuddy -c "Delete :CFBundleDisplayVersion" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}
     /usr/libexec/PlistBuddy -c "Add :CFBundleDisplayVersion string" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}
     /usr/libexec/PlistBuddy -c "Set :CFBundleDisplayVersion $APPVERSION.$REVISION" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}
fi

Чтоб добавить скрипт, необходимо выполнить следующие действия:
1. Зажать Ctrl+клик на фаил проекта в дереве проекта
2. Add->New Build Phase -> New Run Script Build Phase
3. Откроется окно в которое нужно вставить скрипт.

Continue reading

iPad TV ad

Новая реклама iPad. В рекламе есть приложение созданное нашей командой :)

Small feature with UIlabel

Add framework QuartzCore

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#import

UILabel *label = [[UILabel alloc] init];
     [label setTextColor:[UIColor whiteColor]];
     [label setBackgroundColor:[UIColor darkGrayColor]];
     
     [[label layer] setBorderWidth:2];
     [[label layer] setCornerRadius:15];
     [[label layer] setBorderColor:[UIColor whiteColor].CGColor];
     
     [label setAlpha:0.8];
     [label setTextAlignment:UITextAlignmentCenter];
     [label setFrame:CGRectMake(0, 0, 220, 50)];
     [label setText:@"Loading..."];
     [label setCenter:window.center];
     [window addSubview:label];

Result:

Restoring playlists from iPhone/iPad for iTunes

Возникла проблема после обновления Mac OS X и iTunes. Поломалась база iTunes и плейлисты были утеряны.

Но часть плейлистов осталась на iPhone! И их то мы и востановим.

Continue reading

« Previous 1 2 3 4 Next »