<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Notes of a Developer &#187; iPad</title>
	<atom:link href="http://www.developers-life.com/category/apple/ipad/feed" rel="self" type="application/rss+xml" />
	<link>http://www.developers-life.com</link>
	<description>Develop on Objective-C, UIKit, C, OpenGL for  iPhone, iPad, Mac OS X</description>
	<lastBuildDate>Fri, 03 Feb 2012 11:49:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Create movie from array of images</title>
		<link>http://www.developers-life.com/create-movie-from-array-of-images.html</link>
		<comments>http://www.developers-life.com/create-movie-from-array-of-images.html#comments</comments>
		<pubDate>Mon, 30 Jan 2012 21:22:59 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[AVAssetWriter]]></category>
		<category><![CDATA[AVAssetWriterInput]]></category>
		<category><![CDATA[AVCaptureDeviceInput]]></category>
		<category><![CDATA[AVCaptureVideoDataOutput]]></category>
		<category><![CDATA[AVFoundation]]></category>
		<category><![CDATA[QuartzCore]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1407</guid>
		<description><![CDATA[Create movie from images seq. First part of method, initialize 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950- &#40;void&#41; writeImagesAsMovie:&#40;NSArray *&#41;array toPath:&#40;NSString*&#41;path &#123; &#160; &#160; NSString *documents = &#91;NSSearchPathForDirectoriesInDomains &#40;NSDocumentDirectory, NSUserDomainMask, YES&#41; objectAtIndex: 0&#93;; &#160; &#160; documents = &#91;documents stringByAppendingPathComponent:currentWorkspace&#93;; &#160; &#160; &#160; &#160; //NSLog(path); &#160; &#160; NSString *filename = &#91;documents stringByAppendingPathComponent:&#91;array objectAtIndex:0&#93;&#93;; &#160; &#160; UIImage *first = &#91;UIImage imageWithContentsOfFile:filename&#93;; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Create movie from images seq.</p>
<p>First part of method, initialize</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> writeImagesAsMovie<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span style="color: #400080;">NSArray</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>array toPath<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>path <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>documents <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>NSSearchPathForDirectoriesInDomains <span style="color: #002200;">&#40;</span>NSDocumentDirectory, NSUserDomainMask, <span style="color: #a61390;">YES</span><span style="color: #002200;">&#41;</span> objectAtIndex<span style="color: #002200;">:</span> <span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; documents <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>documents stringByAppendingPathComponent<span style="color: #002200;">:</span>currentWorkspace<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">//NSLog(path);</span><br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>filename <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>documents stringByAppendingPathComponent<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>array objectAtIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; UIImage <span style="color: #002200;">*</span>first <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>UIImage imageWithContentsOfFile<span style="color: #002200;">:</span>filename<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; CGSize frameSize <span style="color: #002200;">=</span> first.size;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSError_Class/"><span style="color: #400080;">NSError</span></a> <span style="color: #002200;">*</span>error <span style="color: #002200;">=</span> <span style="color: #a61390;">nil</span>;<br />
&nbsp; &nbsp; AVAssetWriter <span style="color: #002200;">*</span>videoWriter <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>AVAssetWriter alloc<span style="color: #002200;">&#93;</span> initWithURL<span style="color: #002200;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/"><span style="color: #400080;">NSURL</span></a> fileURLWithPath<span style="color: #002200;">:</span>path<span style="color: #002200;">&#93;</span> fileType<span style="color: #002200;">:</span>AVFileTypeQuickTimeMovie<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; error<span style="color: #002200;">:&amp;</span>error<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span>error<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;error creating AssetWriter: %@&quot;</span>,<span style="color: #002200;">&#91;</span>error description<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/"><span style="color: #400080;">NSDictionary</span></a> <span style="color: #002200;">*</span>videoSettings <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/"><span style="color: #400080;">NSDictionary</span></a> dictionaryWithObjectsAndKeys<span style="color: #002200;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AVVideoCodecH264, AVVideoCodecKey,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> numberWithInt<span style="color: #002200;">:</span>frameSize.width<span style="color: #002200;">&#93;</span>, AVVideoWidthKey,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> numberWithInt<span style="color: #002200;">:</span>frameSize.height<span style="color: #002200;">&#93;</span>, AVVideoHeightKey,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; AVAssetWriterInput<span style="color: #002200;">*</span> writerInput <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>AVAssetWriterInput<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; assetWriterInputWithMediaType<span style="color: #002200;">:</span>AVMediaTypeVideo<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outputSettings<span style="color: #002200;">:</span>videoSettings<span style="color: #002200;">&#93;</span> retain<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/"><span style="color: #400080;">NSMutableDictionary</span></a> <span style="color: #002200;">*</span>attributes <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/"><span style="color: #400080;">NSMutableDictionary</span></a> alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>attributes setObject<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> numberWithUnsignedInt<span style="color: #002200;">:</span>kCVPixelFormatType_32ARGB<span style="color: #002200;">&#93;</span> forKey<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>kCVPixelBufferPixelFormatTypeKey<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>attributes setObject<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> numberWithUnsignedInt<span style="color: #002200;">:</span>frameSize.width<span style="color: #002200;">&#93;</span> forKey<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>kCVPixelBufferWidthKey<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>attributes setObject<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> numberWithUnsignedInt<span style="color: #002200;">:</span>frameSize.height<span style="color: #002200;">&#93;</span> forKey<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>kCVPixelBufferHeightKey<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; AVAssetWriterInputPixelBufferAdaptor <span style="color: #002200;">*</span>adaptor <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>AVAssetWriterInputPixelBufferAdaptor<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;assetWriterInputPixelBufferAdaptorWithAssetWriterInput<span style="color: #002200;">:</span>writerInput<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sourcePixelBufferAttributes<span style="color: #002200;">:</span>attributes<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>videoWriter addInput<span style="color: #002200;">:</span>writerInput<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// fixes all errors</span><br />
&nbsp; &nbsp; writerInput.expectsMediaDataInRealTime <span style="color: #002200;">=</span> <span style="color: #a61390;">YES</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">//Start a session:</span><br />
&nbsp; &nbsp; <span style="color: #a61390;">BOOL</span> start <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>videoWriter startWriting<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Session started? %d&quot;</span>, start<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>videoWriter startSessionAtSourceTime<span style="color: #002200;">:</span>kCMTimeZero<span style="color: #002200;">&#93;</span>;</div></td></tr></tbody></table></div>
<p><span id="more-1407"></span></p>
<p>Second part, writing</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; CVPixelBufferRef buffer <span style="color: #002200;">=</span> <span style="color: #a61390;">NULL</span>;<br />
&nbsp; &nbsp; buffer <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self pixelBufferFromCGImage<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>first CGImage<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #a61390;">BOOL</span> result <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>adaptor appendPixelBuffer<span style="color: #002200;">:</span>buffer withPresentationTime<span style="color: #002200;">:</span>kCMTimeZero<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>result <span style="color: #002200;">==</span> <span style="color: #a61390;">NO</span><span style="color: #002200;">&#41;</span> <span style="color: #11740a; font-style: italic;">//failes on 3GS, but works on iphone 4</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;failed to append buffer&quot;</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span>buffer<span style="color: #002200;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; CVBufferRelease<span style="color: #002200;">&#40;</span>buffer<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/"><span style="color: #400080;">NSThread</span></a> sleepForTimeInterval<span style="color: #002200;">:</span><span style="color: #2400d9;">0.05</span><span style="color: #002200;">&#93;</span>;<br />
<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #a61390;">int</span> reverseSort <span style="color: #002200;">=</span> <span style="color: #a61390;">NO</span>;<br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span style="color: #400080;">NSArray</span></a> <span style="color: #002200;">*</span>newArray <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>array sortedArrayUsingFunction<span style="color: #002200;">:</span>sort context<span style="color: #002200;">:&amp;</span>reverseSort<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; delta <span style="color: #002200;">=</span> <span style="color: #2400d9;">1.0</span><span style="color: #002200;">/</span><span style="color: #002200;">&#91;</span>newArray count<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #a61390;">int</span> fps <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>fpsSlider.value;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #a61390;">int</span> i <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>;<br />
&nbsp; &nbsp; <span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>filename <span style="color: #a61390;">in</span> newArray<span style="color: #002200;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>adaptor.assetWriterInput.readyForMoreMediaData<span style="color: #002200;">&#41;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i<span style="color: #002200;">++</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;inside for loop %d %@ &quot;</span>,i, filename<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CMTime frameTime <span style="color: #002200;">=</span> CMTimeMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">1</span>, fps<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CMTime lastTime<span style="color: #002200;">=</span>CMTimeMake<span style="color: #002200;">&#40;</span>i, fps<span style="color: #002200;">&#41;</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CMTime presentTime<span style="color: #002200;">=</span>CMTimeAdd<span style="color: #002200;">&#40;</span>lastTime, frameTime<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>filePath <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>documents stringByAppendingPathComponent<span style="color: #002200;">:</span>filename<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UIImage <span style="color: #002200;">*</span>imgFrame <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>UIImage imageWithContentsOfFile<span style="color: #002200;">:</span>filePath<span style="color: #002200;">&#93;</span> ;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buffer <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self pixelBufferFromCGImage<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>imgFrame CGImage<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">BOOL</span> result <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>adaptor appendPixelBuffer<span style="color: #002200;">:</span>buffer withPresentationTime<span style="color: #002200;">:</span>presentTime<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>result <span style="color: #002200;">==</span> <span style="color: #a61390;">NO</span><span style="color: #002200;">&#41;</span> <span style="color: #11740a; font-style: italic;">//failes on 3GS, but works on iphone 4</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;failed to append buffer&quot;</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;The error is %@&quot;</span>, <span style="color: #002200;">&#91;</span>videoWriter error<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span>buffer<span style="color: #002200;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CVBufferRelease<span style="color: #002200;">&#40;</span>buffer<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/"><span style="color: #400080;">NSThread</span></a> sleepForTimeInterval<span style="color: #002200;">:</span><span style="color: #2400d9;">0.05</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;error&quot;</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i<span style="color: #002200;">--</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/"><span style="color: #400080;">NSThread</span></a> sleepForTimeInterval<span style="color: #002200;">:</span><span style="color: #2400d9;">0.02</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">//Finish the session:</span><br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>writerInput markAsFinished<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>videoWriter finishWriting<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; CVPixelBufferPoolRelease<span style="color: #002200;">&#40;</span>adaptor.pixelBufferPool<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>videoWriter release<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>writerInput release<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p>Convert UIImage to CVPixelBufferRef</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>CVPixelBufferRef<span style="color: #002200;">&#41;</span> pixelBufferFromCGImage<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span>CGImageRef<span style="color: #002200;">&#41;</span> image<br />
<span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/"><span style="color: #400080;">NSDictionary</span></a> <span style="color: #002200;">*</span>options <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/"><span style="color: #400080;">NSDictionary</span></a> dictionaryWithObjectsAndKeys<span style="color: #002200;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> numberWithBool<span style="color: #002200;">:</span><span style="color: #a61390;">YES</span><span style="color: #002200;">&#93;</span>, kCVPixelBufferCGImageCompatibilityKey,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/"><span style="color: #400080;">NSNumber</span></a> numberWithBool<span style="color: #002200;">:</span><span style="color: #a61390;">YES</span><span style="color: #002200;">&#93;</span>, kCVPixelBufferCGBitmapContextCompatibilityKey,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; CVPixelBufferRef pxbuffer <span style="color: #002200;">=</span> <span style="color: #a61390;">NULL</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; CVPixelBufferCreate<span style="color: #002200;">&#40;</span>kCFAllocatorDefault, CGImageGetWidth<span style="color: #002200;">&#40;</span>image<span style="color: #002200;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CGImageGetHeight<span style="color: #002200;">&#40;</span>image<span style="color: #002200;">&#41;</span>, kCVPixelFormatType_32ARGB, <span style="color: #002200;">&#40;</span>CFDictionaryRef<span style="color: #002200;">&#41;</span> options, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&amp;</span>pxbuffer<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; CVPixelBufferLockBaseAddress<span style="color: #002200;">&#40;</span>pxbuffer, <span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #a61390;">void</span> <span style="color: #002200;">*</span>pxdata <span style="color: #002200;">=</span> CVPixelBufferGetBaseAddress<span style="color: #002200;">&#40;</span>pxbuffer<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; CGColorSpaceRef rgbColorSpace <span style="color: #002200;">=</span> CGColorSpaceCreateDeviceRGB<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; CGContextRef context <span style="color: #002200;">=</span> CGBitmapContextCreate<span style="color: #002200;">&#40;</span>pxdata, CGImageGetWidth<span style="color: #002200;">&#40;</span>image<span style="color: #002200;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CGImageGetHeight<span style="color: #002200;">&#40;</span>image<span style="color: #002200;">&#41;</span>, <span style="color: #2400d9;">8</span>, <span style="color: #2400d9;">4</span><span style="color: #002200;">*</span>CGImageGetWidth<span style="color: #002200;">&#40;</span>image<span style="color: #002200;">&#41;</span>, rgbColorSpace, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;kCGImageAlphaNoneSkipFirst<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; CGContextConcatCTM<span style="color: #002200;">&#40;</span>context, CGAffineTransformMakeRotation<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; CGAffineTransform flipVertical <span style="color: #002200;">=</span> CGAffineTransformMake<span style="color: #002200;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #2400d9;">1</span>, <span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">0</span>, <span style="color: #002200;">-</span><span style="color: #2400d9;">1</span>, <span style="color: #2400d9;">0</span>, CGImageGetHeight<span style="color: #002200;">&#40;</span>image<span style="color: #002200;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; CGContextConcatCTM<span style="color: #002200;">&#40;</span>context, flipVertical<span style="color: #002200;">&#41;</span>; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; CGAffineTransform flipHorizontal <span style="color: #002200;">=</span> CGAffineTransformMake<span style="color: #002200;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #002200;">-</span><span style="color: #2400d9;">1.0</span>, <span style="color: #2400d9;">0.0</span>, <span style="color: #2400d9;">0.0</span>, <span style="color: #2400d9;">1.0</span>, CGImageGetWidth<span style="color: #002200;">&#40;</span>image<span style="color: #002200;">&#41;</span>, <span style="color: #2400d9;">0.0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; CGContextConcatCTM<span style="color: #002200;">&#40;</span>context, flipHorizontal<span style="color: #002200;">&#41;</span>; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; CGContextDrawImage<span style="color: #002200;">&#40;</span>context, CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">0</span>, CGImageGetWidth<span style="color: #002200;">&#40;</span>image<span style="color: #002200;">&#41;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CGImageGetHeight<span style="color: #002200;">&#40;</span>image<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>, image<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; CGColorSpaceRelease<span style="color: #002200;">&#40;</span>rgbColorSpace<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; CGContextRelease<span style="color: #002200;">&#40;</span>context<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; CVPixelBufferUnlockBaseAddress<span style="color: #002200;">&#40;</span>pxbuffer, <span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #a61390;">return</span> pxbuffer;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/create-movie-from-array-of-images.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ScrollView with scroll&#8217;s indicators, which are shown all the time.</title>
		<link>http://www.developers-life.com/scrollview-with-scrolls-indicators-which-are-shown-all-the-time.html</link>
		<comments>http://www.developers-life.com/scrollview-with-scrolls-indicators-which-are-shown-all-the-time.html#comments</comments>
		<pubDate>Thu, 22 Dec 2011 09:53:13 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Category]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[scroll]]></category>
		<category><![CDATA[UIImageView]]></category>
		<category><![CDATA[UIKit]]></category>
		<category><![CDATA[UIScrollView]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1334</guid>
		<description><![CDATA[My simple solution by writing category for UIImageView, because scroller is imageview. How to use :) Just setup tag for your scrollview and you will get one with scroll indicators, which are shown all the time. 1234567891011121314151617181920212223242526272829303132#define noDisableVerticalScrollTag 836913 #define noDisableHorizontalScrollTag 836914 @implementation UIImageView &#40;ForScrollView&#41; - &#40;void&#41; setAlpha:&#40;float&#41;alpha &#123; &#160; &#160; &#160; &#160; if &#40;self.superview.tag [...]]]></description>
			<content:encoded><![CDATA[<p>My simple solution by writing category for UIImageView, because scroller is imageview.</p>
<p>How to use :)<br />
Just setup tag for your scrollview and you will get one with scroll indicators, which are shown all the time.</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6e371a;">#define noDisableVerticalScrollTag 836913</span><br />
<span style="color: #6e371a;">#define noDisableHorizontalScrollTag 836914</span><br />
<br />
<span style="color: #a61390;">@implementation</span> UIImageView <span style="color: #002200;">&#40;</span>ForScrollView<span style="color: #002200;">&#41;</span> <br />
<br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> setAlpha<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">float</span><span style="color: #002200;">&#41;</span>alpha <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>self.superview.tag <span style="color: #002200;">==</span> noDisableVerticalScrollTag<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>alpha <span style="color: #002200;">==</span> <span style="color: #2400d9;">0</span> <span style="color: #002200;">&amp;&amp;</span> self.autoresizingMask <span style="color: #002200;">==</span> UIViewAutoresizingFlexibleLeftMargin<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>self.frame.size.width &lt; <span style="color: #2400d9;">10</span> <span style="color: #002200;">&amp;&amp;</span> self.frame.size.height &gt; self.frame.size.width<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UIScrollView <span style="color: #002200;">*</span>sc <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>UIScrollView<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>self.superview;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>sc.frame.size.height &lt; sc.contentSize.height<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">return</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>self.superview.tag <span style="color: #002200;">==</span> noDisableHorizontalScrollTag<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>alpha <span style="color: #002200;">==</span> <span style="color: #2400d9;">0</span> <span style="color: #002200;">&amp;&amp;</span> self.autoresizingMask <span style="color: #002200;">==</span> UIViewAutoresizingFlexibleTopMargin<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>self.frame.size.height &lt; <span style="color: #2400d9;">10</span> <span style="color: #002200;">&amp;&amp;</span> self.frame.size.height &lt; self.frame.size.width<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UIScrollView <span style="color: #002200;">*</span>sc <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>UIScrollView<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>self.superview;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>sc.frame.size.width &lt; sc.contentSize.width<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">return</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>super setAlpha<span style="color: #002200;">:</span>alpha<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span><br />
<span style="color: #a61390;">@end</span></div></td></tr></tbody></table></div>
<p>If you want both scroll it&#8217;s easy to change code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/scrollview-with-scrolls-indicators-which-are-shown-all-the-time.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AVPlayer &#8211; looping video without &#8220;hiccup&#8221;/delays</title>
		<link>http://www.developers-life.com/avplayer-looping-video-without-hiccupdelays.html</link>
		<comments>http://www.developers-life.com/avplayer-looping-video-without-hiccupdelays.html#comments</comments>
		<pubDate>Sat, 17 Dec 2011 10:35:35 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[AVFoundation]]></category>
		<category><![CDATA[AVMutableComposition]]></category>
		<category><![CDATA[AVPlayer]]></category>
		<category><![CDATA[AVPlayerActionAtItemEndNone]]></category>
		<category><![CDATA[AVPlayerItem]]></category>
		<category><![CDATA[AVPlayerLayer]]></category>
		<category><![CDATA[AVQueuePlayer]]></category>
		<category><![CDATA[AVURLAsset]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[NSNotificationCenter]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1330</guid>
		<description><![CDATA[I tried create loop by AVQueuePlayer, this method has delays between end and start play. for looping AVQueuePlayer i use this code: 123456&#91;&#91;NSNotificationCenter defaultCenter&#93; addObserver:self &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;selector:@selector&#40;playerItemDidReachEnd:&#41; &#160; &#160; &#160; &#160; &#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>I tried create loop by AVQueuePlayer, this method has delays between end and start play.</p>
<p>for looping AVQueuePlayer i use this code:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/"><span style="color: #400080;">NSNotificationCenter</span></a> defaultCenter<span style="color: #002200;">&#93;</span> addObserver<span style="color: #002200;">:</span>self<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;selector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>playerItemDidReachEnd<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;name<span style="color: #002200;">:</span>AVPlayerItemDidPlayToEndTimeNotification<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;object<span style="color: #002200;">:</span>self.mPlayerItem<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>self player<span style="color: #002200;">&#93;</span>.actionAtItemEnd <span style="color: #002200;">=</span> AVPlayerActionAtItemEndNone;</div></td></tr></tbody></table></div>
<p>and playerItemDidReachEnd</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>playerItemDidReachEnd<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotification_Class/"><span style="color: #400080;">NSNotification</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>notification <br />
<span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; AVPlayerItem <span style="color: #002200;">*</span>p <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>notification object<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#91;</span>p seekToTime<span style="color: #002200;">:</span>kCMTimeZero<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p>Another solution without hiccups/delays based on AVMutableComposition!<br />
<span id="more-1330"></span></p>
<p>Easily solution, I use one AVURLAsset for inserting to composition. No memory leaks and warnings, because used just one object.</p>
<p>Solution:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>AVAsset<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> makeAssetComposition <span style="color: #002200;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #a61390;">int</span> numOfCopies <span style="color: #002200;">=</span> <span style="color: #2400d9;">25</span>;<br />
<br />
&nbsp; &nbsp; AVMutableComposition <span style="color: #002200;">*</span>composition <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>AVMutableComposition alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; AVURLAsset<span style="color: #002200;">*</span> sourceAsset <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>AVURLAsset URLAssetWithURL<span style="color: #002200;">:</span>mURL options<span style="color: #002200;">:</span><span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// calculate time</span><br />
&nbsp; &nbsp; CMTimeRange editRange <span style="color: #002200;">=</span> CMTimeRangeMake<span style="color: #002200;">&#40;</span>CMTimeMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">600</span><span style="color: #002200;">&#41;</span>, CMTimeMake<span style="color: #002200;">&#40;</span>sourceAsset.duration.value, sourceAsset.duration.timescale<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSError_Class/"><span style="color: #400080;">NSError</span></a> <span style="color: #002200;">*</span>editError;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">// and add into your composition </span><br />
&nbsp; &nbsp; <span style="color: #a61390;">BOOL</span> result <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>composition insertTimeRange<span style="color: #002200;">:</span>editRange ofAsset<span style="color: #002200;">:</span>sourceAsset atTime<span style="color: #002200;">:</span>composition.duration error<span style="color: #002200;">:&amp;</span>editError<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>result<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span> i <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; i &lt; numOfCopies; i<span style="color: #002200;">++</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span>composition insertTimeRange<span style="color: #002200;">:</span>editRange ofAsset<span style="color: #002200;">:</span>sourceAsset atTime<span style="color: #002200;">:</span>composition.duration error<span style="color: #002200;">:&amp;</span>editError<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #a61390;">return</span> composition;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p>Play composition:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">AVAsset <span style="color: #002200;">*</span>composition <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self makeAssetComposition<span style="color: #002200;">&#93;</span>;<br />
<br />
<span style="color: #11740a; font-style: italic;">// create an AVPlayer with your composition</span><br />
AVPlayer<span style="color: #002200;">*</span> mp <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>AVPlayer playerWithPlayerItem<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>AVPlayerItem playerItemWithAsset<span style="color: #002200;">:</span>composition<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span style="color: #11740a; font-style: italic;">// Add the player to your UserInterface</span><br />
<span style="color: #11740a; font-style: italic;">// Create a PlayerLayer:</span><br />
AVPlayerLayer <span style="color: #002200;">*</span>playerLayer <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>AVPlayerLayer playerLayerWithPlayer<span style="color: #002200;">:</span>mp<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span style="color: #11740a; font-style: italic;">// integrate it to your view. Here you can customize your player (Fullscreen, or a small preview)</span><br />
<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self window<span style="color: #002200;">&#93;</span>.layer insertSublayer<span style="color: #002200;">:</span>playerLayer atIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span>;<br />
playerLayer.frame <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self window<span style="color: #002200;">&#93;</span>.layer.bounds;<br />
playerLayer.videoGravity <span style="color: #002200;">=</span> AVLayerVideoGravityResizeAspectFill; &nbsp;<br />
<span style="color: #11740a; font-style: italic;">//And finally play your video:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<span style="color: #002200;">&#91;</span>mp play<span style="color: #002200;">&#93;</span>;</div></td></tr></tbody></table></div>
<p>Any questions to comments please.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/avplayer-looping-video-without-hiccupdelays.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AudioSession AudioRouteChange</title>
		<link>http://www.developers-life.com/audiosession-audioroutechange.html</link>
		<comments>http://www.developers-life.com/audiosession-audioroutechange.html#comments</comments>
		<pubDate>Sat, 17 Dec 2011 09:56:46 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[AudioSessionAddPropertyListener]]></category>
		<category><![CDATA[AudioToolbox]]></category>
		<category><![CDATA[kAudioSessionProperty_AudioRouteChange]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1327</guid>
		<description><![CDATA[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 &#60;AudioToolbox/AudioToolbox.h&#62; Insert into init method or any other 1AudioSessionAddPropertyListener &#40;kAudioSessionProperty_AudioRouteChange, callbackHeadphone_func, self&#41;; Listener callback 12345678910111213141516171819202122232425void callbackHeadphone_func &#40; void *inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData [...]]]></description>
			<content:encoded><![CDATA[<p>if you will use or used AVPlayer or you want just know about changes, you can check AudioRouteChange.</p>
<p>Simple solution:</p>
<p>Add framework AudioToolbox and add import to file</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6e371a;">#import &lt;AudioToolbox/AudioToolbox.h&gt;</span></div></td></tr></tbody></table></div>
<p>Insert into init method or any other</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">AudioSessionAddPropertyListener <span style="color: #002200;">&#40;</span>kAudioSessionProperty_AudioRouteChange, callbackHeadphone_func, self<span style="color: #002200;">&#41;</span>;</div></td></tr></tbody></table></div>
<p>Listener callback</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #a61390;">void</span> callbackHeadphone_func <span style="color: #002200;">&#40;</span> <span style="color: #a61390;">void</span> <span style="color: #002200;">*</span>inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, <span style="color: #a61390;">const</span> <span style="color: #a61390;">void</span> <span style="color: #002200;">*</span>inData <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> inID <span style="color: #002200;">==</span> kAudioSessionProperty_AudioRouteChange <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span>mainViewController performSelector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>isHeadsetPluggedIn<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
<span style="color: #002200;">&#125;</span><br />
<br />
<br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> isHeadsetPluggedIn <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; UInt32 routeSize <span style="color: #002200;">=</span> <a href="http://www.opengroup.org/onlinepubs/009695399/functions/sizeof.html"><span style="color: #a61390;">sizeof</span></a> <span style="color: #002200;">&#40;</span>CFStringRef<span style="color: #002200;">&#41;</span>; CFStringRef route;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; AudioSessionGetProperty <span style="color: #002200;">&#40;</span>kAudioSessionProperty_AudioRoute, <span style="color: #002200;">&amp;</span>routeSize, <span style="color: #002200;">&amp;</span>route<span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span style="color: #11740a; font-style: italic;">/* Known values of route:<br />
&nbsp; &nbsp; &nbsp;&quot;Headset&quot;<br />
&nbsp; &nbsp; &nbsp;&quot;Headphone&quot;<br />
&nbsp; &nbsp; &nbsp;&quot;Speaker&quot;<br />
&nbsp; &nbsp; &nbsp;&quot;SpeakerAndMicrophone&quot;<br />
&nbsp; &nbsp; &nbsp;&quot;HeadphonesAndMicrophone&quot;<br />
&nbsp; &nbsp; &nbsp;&quot;HeadsetInOut&quot;<br />
&nbsp; &nbsp; &nbsp;&quot;ReceiverAndMicrophone&quot;<br />
&nbsp; &nbsp; &nbsp;&quot;Lineout&quot; */</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a><span style="color: #002200;">*</span> routeStr <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>route;<br />
&nbsp; &nbsp; DLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@&quot;</span>,routeStr<span style="color: #002200;">&#41;</span>;<br />
<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/audiosession-audioroutechange.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sorting by block</title>
		<link>http://www.developers-life.com/sorting-by-block.html</link>
		<comments>http://www.developers-life.com/sorting-by-block.html#comments</comments>
		<pubDate>Sat, 22 Oct 2011 19:17:30 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[sort]]></category>
		<category><![CDATA[__block]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1296</guid>
		<description><![CDATA[Sorting by block 12345678910111213141516171819NSArray *stringsArray = &#91;NSArray arrayWithObjects: &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;@&#34;string 1&#34;, &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;@&#34;String 21&#34;, &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Sorting by block</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span style="color: #400080;">NSArray</span></a> <span style="color: #002200;">*</span>stringsArray <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span style="color: #400080;">NSArray</span></a> arrayWithObjects<span style="color: #002200;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;string 1&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;String 21&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;string 12&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;String 11&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;String 02&quot;</span>, <span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp;<br />
<span style="color: #a61390;">static</span> NSStringCompareOptions comparisonOptions <span style="color: #002200;">=</span> NSCaseInsensitiveSearch | NSNumericSearch |<br />
&nbsp; &nbsp; &nbsp; &nbsp; NSWidthInsensitiveSearch | NSForcedOrderingSearch;<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/"><span style="color: #400080;">NSLocale</span></a> <span style="color: #002200;">*</span>currentLocale <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/"><span style="color: #400080;">NSLocale</span></a> currentLocale<span style="color: #002200;">&#93;</span>;<br />
&nbsp;<br />
NSComparator finderSortBlock <span style="color: #002200;">=</span> <span style="color: #002200;">^</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span> string1, <span style="color: #a61390;">id</span> string2<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp;<br />
&nbsp; &nbsp; <span style="color: #a61390;">NSRange</span> string1Range <span style="color: #002200;">=</span> NSMakeRange<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span>, <span style="color: #002200;">&#91;</span>string1 length<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span>string1 compare<span style="color: #002200;">:</span>string2 options<span style="color: #002200;">:</span>comparisonOptions range<span style="color: #002200;">:</span>string1Range locale<span style="color: #002200;">:</span>currentLocale<span style="color: #002200;">&#93;</span>;<br />
<span style="color: #002200;">&#125;</span>;<br />
&nbsp;<br />
<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/"><span style="color: #400080;">NSArray</span></a> <span style="color: #002200;">*</span>finderSortArray <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>stringsArray sortedArrayUsingComparator<span style="color: #002200;">:</span>finderSortBlock<span style="color: #002200;">&#93;</span>;<br />
NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;finderSortArray: %@&quot;</span>, finderSortArray<span style="color: #002200;">&#41;</span>;</div></td></tr></tbody></table></div>
<p>Result:<br />
/*<br />
Output:<br />
finderSortArray: (<br />
    &#8220;string 1&#8243;,<br />
    &#8220;String 02&#8243;,<br />
    &#8220;String 11&#8243;,<br />
    &#8220;string 12&#8243;,<br />
    &#8220;String 21&#8243;<br />
)<br />
*/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/sorting-by-block.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Font Metrics</title>
		<link>http://www.developers-life.com/getting-font-metrics.html</link>
		<comments>http://www.developers-life.com/getting-font-metrics.html#comments</comments>
		<pubDate>Sat, 22 Oct 2011 19:11:16 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[UIFont]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1292</guid>
		<description><![CDATA[Doc about font metric Getting Font Metrics]]></description>
			<content:encoded><![CDATA[<p>Doc about font metric</p>
<p><img class="alignnone" title="Getting Font Metrics" src="http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/FontHandling/Tasks/Art/glyph_metrics.gif" alt="" width="506" height="274" /></p>
<h5><a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/FontHandling/Tasks/GettingFontMetrics.html" target="_blank">Getting Font Metrics</a></h5>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/getting-font-metrics.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tweeting &#8211; example of Apple</title>
		<link>http://www.developers-life.com/tweeting-example-of-apple.html</link>
		<comments>http://www.developers-life.com/tweeting-example-of-apple.html#comments</comments>
		<pubDate>Wed, 05 Oct 2011 11:51:43 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Example]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[Sample]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[UIKit]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1289</guid>
		<description><![CDATA[Tweeting]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="timeline" src="http://gyazo.com/db662f5eefda0745e7ee77bdaed9c5e0.png" alt="" width="238" height="446" /></p>
<p><img class="alignnone" title="simple twet" src="http://gyazo.com/440631f54c9cfec93eae9d2bd3dd216b.png" alt="" width="247" height="48" /></p>
<p><img class="alignnone" title="easy tweet" src="http://gyazo.com/9ff6e31593588cd1c351fbac9b05c25f.png" alt="" width="246" height="369" /></p>
<p><a href="http://www.developers-life.com/wp-content/uploads/2011/10/Tweeting.zip">Tweeting</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/tweeting-example-of-apple.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Assistive Touch в iOS 5 beta 3</title>
		<link>http://www.developers-life.com/assistive-touch-%d0%b2-ios-5-beta-3.html</link>
		<comments>http://www.developers-life.com/assistive-touch-%d0%b2-ios-5-beta-3.html#comments</comments>
		<pubDate>Tue, 12 Jul 2011 08:20:17 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Assistive Touch]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iOS 5]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1222</guid>
		<description><![CDATA[В новой бета-версии прошивки iOS 5, которую Apple выпустили сегодня, они активировали новую функцию под названием «Assistive Touch». Это было и в прошлых бетах, но активировать их можно только сейчас. Новая функция призвана принести немного больше возможностей для тех, кто испытывает проблемы с использованием традиционных жестов. Assistive Touch активируется при нажатии на заранее указанный угол. [...]]]></description>
			<content:encoded><![CDATA[<p>В новой бета-версии прошивки iOS 5, которую Apple выпустили сегодня, они активировали новую функцию под названием «Assistive Touch». Это было и в прошлых бетах, но активировать их можно только сейчас. Новая функция призвана принести немного больше возможностей для тех, кто испытывает проблемы с использованием традиционных жестов.</p>
<p>Assistive Touch активируется при нажатии на заранее указанный угол.</p>
<p>Далее скриншоты и видео<br />
<span id="more-1222"></span><br />
<img class="alignnone" title="Assistive Touch в iOS 5 beta 3" src="http://i-ekb.ru/wp-content/uploads/2011/07/dat.jpg" alt="" width="315" height="420" /><img class="alignleft" title="Assistive Touch в iOS 5 beta 3" src="http://i-ekb.ru/wp-content/uploads/2011/07/dis.jpg" alt="" width="315" height="420" /></p>
<p><img class="alignnone" title="Assistive Touch в iOS 5 beta 3" src="http://i-ekb.ru/wp-content/uploads/2011/07/iphone2.jpg" alt="" width="280" height="419" /><img class="alignnone" title="Assistive Touch в iOS 5 beta 3" src="http://i-ekb.ru/wp-content/uploads/2011/07/IMG_2051.jpg" alt="" width="322" height="429" /></p>
<p><iframe width="560" height="349" src="http://www.youtube.com/embed/31i2p0gjHTw" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/assistive-touch-%d0%b2-ios-5-beta-3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to include ttf fonts to iOS app</title>
		<link>http://www.developers-life.com/how-to-include-ttf-fonts-to-ios-app.html</link>
		<comments>http://www.developers-life.com/how-to-include-ttf-fonts-to-ios-app.html#comments</comments>
		<pubDate>Thu, 14 Apr 2011 11:42:06 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[plist]]></category>
		<category><![CDATA[UIFont]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1215</guid>
		<description><![CDATA[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: Add your custom font files into your project using XCode as a resource Add [...]]]></description>
			<content:encoded><![CDATA[<p>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:</p>
<ol>
<li>Add your custom font files into your project using XCode as a resource</li>
<li>Add a key to your info.plist file called UIAppFonts.</li>
<li>Make this key an array</li>
<li>For each font you have, enter the full name of your font file (including the extension) as items to the UIAppFonts array</li>
<li>Save info.plist</li>
<li>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…</li>
</ol>
<p>It’s that simple!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/how-to-include-ttf-fonts-to-ios-app.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Adding SVN revision to Xcode project</title>
		<link>http://www.developers-life.com/adding-svn-revision-to-xcode-project.html</link>
		<comments>http://www.developers-life.com/adding-svn-revision-to-xcode-project.html#comments</comments>
		<pubDate>Wed, 23 Feb 2011 12:43:01 +0000</pubDate>
		<dc:creator>Vladimir Boychentsov</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[RegExp]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Xcode]]></category>
		<category><![CDATA[Кодинг]]></category>

		<guid isPermaLink="false">http://www.developers-life.com/?p=1193</guid>
		<description><![CDATA[Просмотр ревизии в самом приложении предотвращает путаницу и всякие проблемы с отслеживанием текущей версии. Чтоб отслеживать версию репозитория нам нужно добавить слдеющий код bash скрипта. 12345678910REVISION=`svnversion -nc &#124; /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'` APPVERSION=`/usr/libexec/PlistBuddy -c &#34;Print CFBundleVersion&#34; &#34;${TARGET_BUILD_DIR}&#34;/${INFOPLIST_PATH}` xported=&#34;xported&#34; if &#91; $APPVERSION != $xported &#93;; then &#160; &#160; &#160;/usr/libexec/PlistBuddy -c &#34;Delete :CFBundleDisplayVersion&#34; &#34;${TARGET_BUILD_DIR}&#34;/${INFOPLIST_PATH} &#160; &#160; &#160;/usr/libexec/PlistBuddy -c [...]]]></description>
			<content:encoded><![CDATA[<p>Просмотр ревизии в самом приложении предотвращает путаницу и всякие проблемы с отслеживанием текущей версии.</p>
<p>Чтоб отслеживать версию репозитория нам нужно добавить слдеющий код bash скрипта.</p>
<div class="codecolorer-container bash geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">REVISION</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">svnversion</span> <span style="color: #660033;">-nc</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/^[^:]*://;s/[A-Za-z]//'</span><span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #007800;">APPVERSION</span>=<span style="color: #000000; font-weight: bold;">`/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>PlistBuddy <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;Print CFBundleVersion&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${TARGET_BUILD_DIR}</span>&quot;</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${INFOPLIST_PATH}</span><span style="color: #000000; font-weight: bold;">`</span><br />
<br />
<span style="color: #007800;">xported</span>=<span style="color: #ff0000;">&quot;xported&quot;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$APPVERSION</span> <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #007800;">$xported</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>PlistBuddy <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;Delete :CFBundleDisplayVersion&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${TARGET_BUILD_DIR}</span>&quot;</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${INFOPLIST_PATH}</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>PlistBuddy <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;Add :CFBundleDisplayVersion string&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${TARGET_BUILD_DIR}</span>&quot;</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${INFOPLIST_PATH}</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>PlistBuddy <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;Set :CFBundleDisplayVersion <span style="color: #007800;">$APPVERSION</span>.<span style="color: #007800;">$REVISION</span>&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${TARGET_BUILD_DIR}</span>&quot;</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${INFOPLIST_PATH}</span><br />
<span style="color: #000000; font-weight: bold;">fi</span></div></td></tr></tbody></table></div>
<p>Чтоб добавить скрипт, необходимо выполнить следующие действия:<br />
1. Зажать Ctrl+клик на фаил проекта в дереве проекта<br />
2. Add->New Build Phase -> New Run Script Build Phase<br />
3. Откроется окно в которое нужно вставить скрипт.</p>
<p><span id="more-1193"></span></p>
<p>В самом проекте, пример на сплеш скрине, создаем лейбл и читаем версию программы к примеру как-то так.</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>version <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Version &quot;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/"><span style="color: #400080;">NSBundle</span></a> mainBundle<span style="color: #002200;">&#93;</span> objectForInfoDictionaryKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;CFBundleDisplayVersion&quot;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; version <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>version stringByAppendingString<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/"><span style="color: #400080;">NSBundle</span></a> mainBundle<span style="color: #002200;">&#93;</span> objectForInfoDictionaryKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;CFBundleDisplayVersion&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; version <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;&quot;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
<p><img src="http://gyazo.com/150e15a5c21dbae21bcb6d5026220da2.png" alt="Adding SVN revision to Xcode project" /></p>
<p>Существует и второй вариант, более простой. (На самом деле можно придумать еще много разных способов.) Добавляем следующий bash скрипт в проект и добавляем фаил revision.h.</p>
<div class="codecolorer-container bash geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">REV</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">svnversion</span> -n<span style="color: #000000; font-weight: bold;">`</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;#define kRevisionNumber @<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #007800;">$REV</span><span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #800000;">${PROJECT_DIR}</span><span style="color: #000000; font-weight: bold;">/</span>revision.h</div></td></tr></tbody></table></div>
<p>Желательно фаил вставить в один какой-то дальний хидер, чтоб при компилировании не пересобирался весь проект. </p>
<p>Для этого варианта можно написать что-то типа этого:</p>
<div class="codecolorer-container objc geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:810px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span>version <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Version &quot;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/"><span style="color: #400080;">NSBundle</span></a> mainBundle<span style="color: #002200;">&#93;</span> objectForInfoDictionaryKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;CFBundleVersion&quot;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">!=</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; version <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>version stringByAppendingString<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/"><span style="color: #400080;">NSBundle</span></a> mainBundle<span style="color: #002200;">&#93;</span> objectForInfoDictionaryKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;CFBundleVersion&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; version <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>version stringByAppendingString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;.&quot;</span><span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; version <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>version stringByAppendingString<span style="color: #002200;">:</span>kRevisionNumber<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; version <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;&quot;</span>;<br />
&nbsp; &nbsp; &nbsp;<span style="color: #002200;">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.developers-life.com/adding-svn-revision-to-xcode-project.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

