<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Universal Creators</title>
	
	<link>http://www.ucstory.com/blog</link>
	<description>ucstory for us</description>
	<pubDate>Sun, 14 Jun 2009 17:36:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/UniversalCreators" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="universalcreators" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>iPhone SDK Examples</title>
		<link>http://www.ucstory.com/blog/archives/206</link>
		<comments>http://www.ucstory.com/blog/archives/206#comments</comments>
		<pubDate>Sun, 14 Jun 2009 17:36:28 +0000</pubDate>
		<dc:creator>cplus98</dc:creator>
		
		<category><![CDATA[Article]]></category>

		<category><![CDATA[Example]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.ucstory.com/blog/?p=206</guid>
		<description><![CDATA[Logging
In Xcode, click Run &#62; Console to see NSLog statements.
NSLog(@&#8221;log: %@ &#8220;, myString); NSLog(@&#8221;log: %f &#8220;, myFloat); NSLog(@&#8221;log: %i &#8220;, myInt);

Display Images
Display an image anywhere on the screen, without using UI Builder. You can use this for other types of views as well.
CGRect myImageRect = CGRectMake(0.0f, 0.0f, 320.0f, 109.0f); UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect]; [...]]]></description>
			<content:encoded><![CDATA[<img style='float: right; margin-left: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=d67534d277cf0b173a00c1ff5b35c35d&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=60 height=60/><h3>Logging</h3>
<div class="topic">In Xcode, click Run &gt; Console to see NSLog statements.</p>
<div class="snippet">NSLog(@&#8221;log: %@ &#8220;, myString); NSLog(@&#8221;log: %f &#8220;, myFloat); NSLog(@&#8221;log: %i &#8220;, myInt);</div>
</div>
<h3>Display Images</h3>
<div class="topic">Display an image anywhere on the screen, without using UI Builder. You can use this for other types of views as well.</p>
<div class="snippet">CGRect myImageRect = CGRectMake(0.0f, 0.0f, 320.0f, 109.0f); UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect]; [myImage setImage:[UIImage imageNamed:@"myImage.png"]]; myImage.opaque = YES; // explicitly opaque for performance [self.view addSubview:myImage]; [myImage release];</div>
</div>
<h3>Application Frame</h3>
<div class="topic">Use &#8220;<strong>bounds</strong>&#8221; instead of &#8220;<strong>applicationFrame</strong>&#8221; &#8212; the latter will introduce a 20 pixel empty status bar (unless you want that..)</div>
<h3>Web view</h3>
<div class="topic">A basic UIWebView.</p>
<div class="snippet">CGRect webFrame = CGRectMake(0.0, 0.0, 320.0, 460.0); UIWebView *webView = [[UIWebView alloc] initWithFrame:webFrame]; [webView setBackgroundColor:[UIColor whiteColor]]; NSString *urlAddress = @&#8221;http://www.google.com&#8221;; NSURL *url = [NSURL URLWithString:urlAddress]; NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; [webView loadRequest:requestObj]; [self addSubview:webView];  [webView release];</div>
</div>
<h3>Display the Network Activity Status Indicator</h3>
<div class="topic">This is the rotating icon displayed on the iPhone status bar in the upper left to indicate there is background network activity taking place.</p>
<div class="snippet">UIApplication* app = [UIApplication sharedApplication]; app.networkActivityIndicatorVisible = YES; // to stop it, set this to NO</div>
</div>
<h3>Animation: Series of images</h3>
<div class="topic">Show a series of images in succession</p>
<div class="snippet">NSArray *myImages = [NSArray arrayWithObjects: 	[UIImage imageNamed:@"myImage1.png"], 	[UIImage imageNamed:@"myImage2.png"], 	[UIImage imageNamed:@"myImage3.png"], 	[UIImage imageNamed:@"myImage4.gif"], 	nil];  UIImageView *myAnimatedView = [UIImageView alloc]; [myAnimatedView initWithFrame:[self bounds]]; myAnimatedView.animationImages = myImages; myAnimatedView.animationDuration = 0.25; // seconds myAnimatedView.animationRepeatCount = 0; // 0 = loops forever [myAnimatedView startAnimating]; [self addSubview:myAnimatedView]; [myAnimatedView release];</div>
</div>
<h3>Animation: Move an object</h3>
<div class="topic">Show something moving across the screen. Note: this type of animation is &#8220;fire and forget&#8221; &#8212; you cannot obtain any information about the objects during animation (such as current position). If you need this information, you will want to animate manually using a Timer and adjusting the x&amp;y coordinates as necessary.</p>
<div class="snippet">CABasicAnimation *theAnimation;	 theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.translation.x"]; theAnimation.duration=1; theAnimation.repeatCount=2; theAnimation.autoreverses=YES; theAnimation.fromValue=[NSNumber numberWithFloat:0]; theAnimation.toValue=[NSNumber numberWithFloat:-60]; [view.layer addAnimation:theAnimation forKey:@"animateLayer"];</div>
</div>
<h3>NSString and int</h3>
<div class="topic">The following example displays an integer&#8217;s value as a text label:</p>
<div class="snippet">currentScoreLabel.text = [NSString stringWithFormat:@"%d", currentScore];</div>
</div>
<h3>Regular Expressions (RegEx)</h3>
<div class="topic">There is currently no easy way to do RegEx with the framework. You cannot use any regex involving NSPredicate on iPhone &#8212; it may work in Simulator, but does not work on the device!</div>
<h3>Draggable items</h3>
<div class="topic">Here&#8217;s how to create a simple draggable image.<br />
1. Create a new class that inherits from UIImageView</p>
<div class="snippet">@interface myDraggableImage : UIImageView { }</div>
<p>2. In the implementation for this new class, add the 2 methods:</p>
<div class="snippet">- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { 	 	// Retrieve the touch point 	CGPoint pt = [[touches anyObject] locationInView:self]; 	startLocation = pt; 	[[self superview] bringSubviewToFront:self]; 	 } - (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event { 	 	// Move relative to the original touch point 	CGPoint pt = [[touches anyObject] locationInView:self]; 	CGRect frame = [self frame]; 	frame.origin.x += pt.x - startLocation.x; 	frame.origin.y += pt.y - startLocation.y; 	[self setFrame:frame]; }</div>
<p>3. Now instantiate the new class as you would any other new image and add it to your view</p>
<div class="snippet">dragger = [[myDraggableImage alloc] initWithFrame:myDragRect]; [dragger setImage:[UIImage imageNamed:@"myImage.png"]]; [dragger setUserInteractionEnabled:YES];</div>
</div>
<h3>Vibration and Sound</h3>
<div class="topic">Here is how to make the phone vibrate (Note: Vibration does not work in the Simulator, it only works on the device.)</p>
<div class="snippet">AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);</div>
<p>Sound will work in the Simulator, however some sound (such as looped) has been reported as not working in Simulator or even altogether depending on the audio format. Note there are specific filetypes that must be used (.wav in this example).</p>
<div class="snippet">SystemSoundID pmph; id sndpath = [[NSBundle mainBundle]  	pathForResource:@&#8221;mySound&#8221;  	ofType:@&#8221;wav&#8221;  	inDirectory:@&#8221;/&#8221;]; CFURLRef baseURL = (CFURLRef) [[NSURL alloc] initFileURLWithPath:sndpath]; AudioServicesCreateSystemSoundID (baseURL, &amp;pmph); AudioServicesPlaySystemSound(pmph);	 [baseURL release];</div>
</div>
<h3>Threading</h3>
<div class="topic">1. Create the new thread:</p>
<div class="snippet">[NSThread detachNewThreadSelector:@selector(<strong>myMethod</strong>)  		toTarget:self  		withObject:nil];</div>
<p>2. Create the method that is called by the new thread:</p>
<div class="snippet">- (void)<strong>myMethod</strong> { 	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 				     	*** code that should be run in the new thread goes here *** 				    	[pool release]; }</div>
<p>What if you need to do something to the main thread from inside your new thread (for example, show a loading symbol)? Use<strong>performSelectorOnMainThread</strong>.</p>
<div class="snippet">[self performSelectorOnMainThread:@selector(<strong>myMethod</strong>)  	withObject:nil  	waitUntilDone:false];</div>
</div>
<h3>Reading crash logs</h3>
<div class="topic">If you&#8217;re in the unfortunate position of having to decipher a crash log, <a href="http://www.anoshkin.net/blog/2008/09/09/iphone-crash-logs/" target="_blank">navigate here</a> to give them meaning.</div>
<h3>Testing</h3>
<div class="topic">1. In Simulator, click Hardware &gt; Simulate Memory Warning to test. You may need to enable this setting on each new page of your app.<br />
2. Be sure to test your app in Airplane Mode.</div>
<h3>Access properties/methods in other classes</h3>
<div class="topic">One way to do this is via the AppDelegate:</p>
<div class="snippet">myAppDelegate *appDelegate  	= (myAppDelegate *)[[UIApplication sharedApplication] delegate]; [[[appDelegate rootViewController] flipsideViewController] myMethod];</div>
</div>
<h3>Random Numbers</h3>
<div class="topic">Use <strong>arc4random()</strong>. There is also <strong>random()</strong>, but you must seed it manually, so arc4random() is preferred.</div>
<h3>Timers</h3>
<div class="topic">This timer will call <strong>myMethod</strong> every 1 second.</p>
<div class="snippet">[NSTimer scheduledTimerWithTimeInterval:1  	target:self  	selector:@selector(<strong>myMethod</strong>)  	userInfo:nil  	repeats:YES];</div>
<p>What if you need to pass an object to <strong>myMethod</strong>? Use the &#8220;userInfo&#8221; property.<br />
1. First create the Timer</p>
<div class="snippet">[NSTimer scheduledTimerWithTimeInterval:1  	target:self  	selector:@selector(<strong>myMethod</strong>)  	userInfo:<strong>myObject</strong> repeats:YES];</div>
<p>2. Then pass the NSTimer object to your method:</p>
<div class="snippet">-(void)<strong>myMethod</strong>:<strong>(NSTimer*)timer</strong> {  	// Now I can access all the properties and methods of <strong>myObject</strong> [<strong>[timer userInfo]</strong> myObjectMethod]; }</div>
<p>To stop a timer, use &#8220;invalidate&#8221;:</p>
<div class="snippet">[myTimer invalidate]; myTimer = nil; // ensures we never invalidate an already invalid Timer</div>
</div>
<h3>Application analytics</h3>
<div class="topic">When you release, you might want to collect data on how often your app is being used. Most people are using <a href="http://www.pinchmedia.com/" target="_blank">PinchMedia</a> for this. They give you Obj-C code that is easy to add to your app and then view statistics through their website.</div>
<h3>Time</h3>
<div class="topic">Calculate the passage of time by using <strong>CFAbsoluteTimeGetCurrent()</strong>.</p>
<div class="snippet">CFAbsoluteTime myCurrentTime = CFAbsoluteTimeGetCurrent(); // perform calculations here</div>
</div>
<h3>Alerts</h3>
<div class="topic">Show a simple alert with OK button.</p>
<div class="snippet">UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@&#8221;An Alert!&#8221;  		delegate:self cancelButtonTitle:@&#8221;OK&#8221; otherButtonTitles:nil]; [alert show]; [alert release];</div>
</div>
<h3>Plist files</h3>
<div class="topic">Application-specific plist files can be stored in the Resources folder of the app bundle. When the app first launches, it should check if there is an existing plist in the user&#8217;s Documents folder, and if not it should copy the plist from the app bundle.</p>
<div class="snippet">// Look in Documents for an existing plist file NSArray *paths = NSSearchPathForDirectoriesInDomains( 	NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; myPlistPath = [documentsDirectory stringByAppendingPathComponent:  	[NSString stringWithFormat: @"%@.plist", plistName] ]; [myPlistPath retain];  // If it&#8217;s not there, copy it from the bundle NSFileManager *fileManger = [NSFileManager defaultManager]; if ( ![fileManger fileExistsAtPath:myPlistPath] ) { 	NSString *pathToSettingsInBundle = [[NSBundle mainBundle]  		pathForResource:plistName ofType:@&#8221;plist&#8221;]; }</div>
<p>Now read the plist file from Documents</p>
<div class="snippet">NSArray *paths = NSSearchPathForDirectoriesInDomains( 	NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectoryPath = [paths objectAtIndex:0]; NSString *path = [documentsDirectoryPath  	stringByAppendingPathComponent:@"myApp.plist"]; NSMutableDictionary *plist = [NSDictionary dictionaryWithContentsOfFile: path];</div>
<p>Now read and set key/values</p>
<div class="snippet">myKey = (int)[[plist valueForKey:@"myKey"] intValue]; myKey2 = (bool)[[plist valueForKey:@"myKey2"] boolValue];  [plist setValue:myKey forKey:@"myKey"]; [plist writeToFile:path atomically:YES];</div>
</div>
<h3>Info button</h3>
<div class="topic">Increase the touchable area on the Info button, so it&#8217;s easier to press.</p>
<div class="snippet">CGRect newInfoButtonRect = CGRectMake(infoButton.frame.origin.x-25,  	infoButton.frame.origin.y-25, infoButton.frame.size.width+50,  	infoButton.frame.size.height+50); [infoButton setFrame:newInfoButtonRect];</div>
</div>
<h3>Detecting Subviews</h3>
<div class="topic">You can loop through subviews of an existing view. This works especially well if you use the &#8220;tag&#8221; property on your views.</p>
<div class="snippet">for (UIImageView *anImage in [self.view subviews]) { 	if (anImage.tag == 1) { 		// do something 	} }</div>
</div>
<h3>Handy References</h3>
<div class="topic">
<ul>
<li><a title="Click to visit Apple's How-To website" href="http://developer.apple.com/iphone/gettingstarted/docs/gettingstartedfaq.action" target="_blank">Official Apple How-To&#8217;s</a></li>
<li><a title="Click to visit the Objective-C primer" href="http://cocoadevcentral.com/d/learn_objectivec/" target="_blank">Learn Objective-C</a></li>
</ul>
</div>
<p>In Xcode, click Run &gt; Console to see NSLog statements.</p>
<p>NSLog(@&#8221;log: %@ &#8220;, myString);<br />
NSLog(@&#8221;log: %f &#8220;, myFloat);<br />
NSLog(@&#8221;log: %i &#8220;, myInt);</p>
<p>Display Images<br />
Display an image anywhere on the screen, without using UI Builder. You can use this for other types of views as well.</p>
<p>CGRect myImageRect = CGRectMake(0.0f, 0.0f, 320.0f, 109.0f);<br />
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];<br />
[myImage setImage:[UIImage imageNamed:@"myImage.png"]];<br />
myImage.opaque = YES; // explicitly opaque for performance<br />
[self.view addSubview:myImage];<br />
[myImage release];</p>
<p>Application Frame<br />
Use &#8220;bounds&#8221; instead of &#8220;applicationFrame&#8221; &#8212; the latter will introduce a 20 pixel empty status bar (unless you want that..)<br />
Web view<br />
A basic UIWebView.</p>
<p>CGRect webFrame = CGRectMake(0.0, 0.0, 320.0, 460.0);<br />
UIWebView *webView = [[UIWebView alloc] initWithFrame:webFrame];<br />
[webView setBackgroundColor:[UIColor whiteColor]];<br />
NSString *urlAddress = @&#8221;http://www.google.com&#8221;;<br />
NSURL *url = [NSURL URLWithString:urlAddress];<br />
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];<br />
[webView loadRequest:requestObj];<br />
[self addSubview:webView];<br />
[webView release];</p>
<p>Display the Network Activity Status Indicator<br />
This is the rotating icon displayed on the iPhone status bar in the upper left to indicate there is background network activity taking place.</p>
<p>UIApplication* app = [UIApplication sharedApplication];<br />
app.networkActivityIndicatorVisible = YES; // to stop it, set this to NO</p>
<p>Animation: Series of images<br />
Show a series of images in succession</p>
<p>NSArray *myImages = [NSArray arrayWithObjects:<br />
[UIImage imageNamed:@"myImage1.png"],<br />
[UIImage imageNamed:@"myImage2.png"],<br />
[UIImage imageNamed:@"myImage3.png"],<br />
[UIImage imageNamed:@"myImage4.gif"],<br />
nil];</p>
<p>UIImageView *myAnimatedView = [UIImageView alloc];<br />
[myAnimatedView initWithFrame:[self bounds]];<br />
myAnimatedView.animationImages = myImages;<br />
myAnimatedView.animationDuration = 0.25; // seconds<br />
myAnimatedView.animationRepeatCount = 0; // 0 = loops forever<br />
[myAnimatedView startAnimating];<br />
[self addSubview:myAnimatedView];<br />
[myAnimatedView release];</p>
<p>Animation: Move an object<br />
Show something moving across the screen. Note: this type of animation is &#8220;fire and forget&#8221; &#8212; you cannot obtain any information about the objects during animation (such as current position). If you need this information, you will want to animate manually using a Timer and adjusting the x&amp;y coordinates as necessary.</p>
<p>CABasicAnimation *theAnimation;<br />
theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.translation.x"];<br />
theAnimation.duration=1;<br />
theAnimation.repeatCount=2;<br />
theAnimation.autoreverses=YES;<br />
theAnimation.fromValue=[NSNumber numberWithFloat:0];<br />
theAnimation.toValue=[NSNumber numberWithFloat:-60];<br />
[view.layer addAnimation:theAnimation forKey:@"animateLayer"];</p>
<p>NSString and int<br />
The following example displays an integer&#8217;s value as a text label:</p>
<p>currentScoreLabel.text = [NSString stringWithFormat:@"%d", currentScore];</p>
<p>Regular Expressions (RegEx)<br />
There is currently no easy way to do RegEx with the framework. You cannot use any regex involving NSPredicate on iPhone &#8212; it may work in Simulator, but does not work on the device!<br />
Draggable items<br />
Here&#8217;s how to create a simple draggable image.<br />
1. Create a new class that inherits from UIImageView</p>
<p>@interface myDraggableImage : UIImageView {<br />
}</p>
<p>2. In the implementation for this new class, add the 2 methods:</p>
<p>- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {</p>
<p>// Retrieve the touch point<br />
CGPoint pt = [[touches anyObject] locationInView:self];<br />
startLocation = pt;<br />
[[self superview] bringSubviewToFront:self];</p>
<p>}<br />
- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {</p>
<p>// Move relative to the original touch point<br />
CGPoint pt = [[touches anyObject] locationInView:self];<br />
CGRect frame = [self frame];<br />
frame.origin.x += pt.x - startLocation.x;<br />
frame.origin.y += pt.y - startLocation.y;<br />
[self setFrame:frame];<br />
}</p>
<p>3. Now instantiate the new class as you would any other new image and add it to your view</p>
<p>dragger = [[myDraggableImage alloc] initWithFrame:myDragRect];<br />
[dragger setImage:[UIImage imageNamed:@"myImage.png"]];<br />
[dragger setUserInteractionEnabled:YES];</p>
<p>Vibration and Sound<br />
Here is how to make the phone vibrate (Note: Vibration does not work in the Simulator, it only works on the device.)</p>
<p>AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);</p>
<p>Sound will work in the Simulator, however some sound (such as looped) has been reported as not working in Simulator or even altogether depending on the audio format. Note there are specific filetypes that must be used (.wav in this example).</p>
<p>SystemSoundID pmph;<br />
id sndpath = [[NSBundle mainBundle]<br />
pathForResource:@&#8221;mySound&#8221;<br />
ofType:@&#8221;wav&#8221;<br />
inDirectory:@&#8221;/&#8221;];<br />
CFURLRef baseURL = (CFURLRef) [[NSURL alloc] initFileURLWithPath:sndpath];<br />
AudioServicesCreateSystemSoundID (baseURL, &amp;pmph);<br />
AudioServicesPlaySystemSound(pmph);<br />
[baseURL release];</p>
<p>Threading<br />
1. Create the new thread:</p>
<p>[NSThread detachNewThreadSelector:@selector(myMethod)<br />
toTarget:self<br />
withObject:nil];</p>
<p>2. Create the method that is called by the new thread:</p>
<p>- (void)myMethod {<br />
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];</p>
<p>*** code that should be run in the new thread goes here ***</p>
<p>[pool release];<br />
}</p>
<p>What if you need to do something to the main thread from inside your new thread (for example, show a loading symbol)? Use performSelectorOnMainThread.</p>
<p>[self performSelectorOnMainThread:@selector(myMethod)<br />
withObject:nil<br />
waitUntilDone:false];</p>
<p>Reading crash logs<br />
If you&#8217;re in the unfortunate position of having to decipher a crash log, navigate here to give them meaning.<br />
Testing<br />
1. In Simulator, click Hardware &gt; Simulate Memory Warning to test. You may need to enable this setting on each new page of your app.<br />
2. Be sure to test your app in Airplane Mode.<br />
Access properties/methods in other classes<br />
One way to do this is via the AppDelegate:</p>
<p>myAppDelegate *appDelegate<br />
= (myAppDelegate *)[[UIApplication sharedApplication] delegate];<br />
[[[appDelegate rootViewController] flipsideViewController] myMethod];</p>
<p>Random Numbers<br />
Use arc4random(). There is also random(), but you must seed it manually, so arc4random() is preferred.<br />
Timers<br />
This timer will call myMethod every 1 second.</p>
<p>[NSTimer scheduledTimerWithTimeInterval:1<br />
target:self<br />
selector:@selector(myMethod)<br />
userInfo:nil<br />
repeats:YES];</p>
<p>What if you need to pass an object to myMethod? Use the &#8220;userInfo&#8221; property.<br />
1. First create the Timer</p>
<p>[NSTimer scheduledTimerWithTimeInterval:1<br />
target:self<br />
selector:@selector(myMethod)<br />
userInfo:myObject<br />
repeats:YES];</p>
<p>2. Then pass the NSTimer object to your method:</p>
<p>-(void)myMethod:(NSTimer*)timer {</p>
<p>// Now I can access all the properties and methods of myObject<br />
[[timer userInfo] myObjectMethod];<br />
}</p>
<p>To stop a timer, use &#8220;invalidate&#8221;:</p>
<p>[myTimer invalidate];<br />
myTimer = nil; // ensures we never invalidate an already invalid Timer</p>
<p>Application analytics<br />
When you release, you might want to collect data on how often your app is being used. Most people are using PinchMedia for this. They give you Obj-C code that is easy to add to your app and then view statistics through their website.<br />
Time<br />
Calculate the passage of time by using CFAbsoluteTimeGetCurrent().</p>
<p>CFAbsoluteTime myCurrentTime = CFAbsoluteTimeGetCurrent();<br />
// perform calculations here</p>
<p>Alerts<br />
Show a simple alert with OK button.</p>
<p>UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@&#8221;An Alert!&#8221;<br />
delegate:self cancelButtonTitle:@&#8221;OK&#8221; otherButtonTitles:nil];<br />
[alert show];<br />
[alert release];</p>
<p>Plist files<br />
Application-specific plist files can be stored in the Resources folder of the app bundle. When the app first launches, it should check if there is an existing plist in the user&#8217;s Documents folder, and if not it should copy the plist from the app bundle.</p>
<p>// Look in Documents for an existing plist file<br />
NSArray *paths = NSSearchPathForDirectoriesInDomains(<br />
NSDocumentDirectory, NSUserDomainMask, YES);<br />
NSString *documentsDirectory = [paths objectAtIndex:0];<br />
myPlistPath = [documentsDirectory stringByAppendingPathComponent:<br />
[NSString stringWithFormat: @"%@.plist", plistName] ];<br />
[myPlistPath retain];</p>
<p>// If it&#8217;s not there, copy it from the bundle<br />
NSFileManager *fileManger = [NSFileManager defaultManager];<br />
if ( ![fileManger fileExistsAtPath:myPlistPath] ) {<br />
NSString *pathToSettingsInBundle = [[NSBundle mainBundle]<br />
pathForResource:plistName ofType:@&#8221;plist&#8221;];<br />
}</p>
<p>Now read the plist file from Documents</p>
<p>NSArray *paths = NSSearchPathForDirectoriesInDomains(<br />
NSDocumentDirectory, NSUserDomainMask, YES);<br />
NSString *documentsDirectoryPath = [paths objectAtIndex:0];<br />
NSString *path = [documentsDirectoryPath<br />
stringByAppendingPathComponent:@"myApp.plist"];<br />
NSMutableDictionary *plist = [NSDictionary dictionaryWithContentsOfFile: path];</p>
<p>Now read and set key/values</p>
<p>myKey = (int)[[plist valueForKey:@"myKey"] intValue];<br />
myKey2 = (bool)[[plist valueForKey:@"myKey2"] boolValue];</p>
<p>[plist setValue:myKey forKey:@"myKey"];<br />
[plist writeToFile:path atomically:YES];</p>
<p>Info button<br />
Increase the touchable area on the Info button, so it&#8217;s easier to press.</p>
<p>CGRect newInfoButtonRect = CGRectMake(infoButton.frame.origin.x-25,<br />
infoButton.frame.origin.y-25, infoButton.frame.size.width+50,<br />
infoButton.frame.size.height+50);<br />
[infoButton setFrame:newInfoButtonRect];</p>
<p>Detecting Subviews<br />
You can loop through subviews of an existing view. This works especially well if you use the &#8220;tag&#8221; property on your views.</p>
<p>for (UIImageView *anImage in [self.view subviews]) {<br />
if (anImage.tag == 1) {<br />
// do something<br />
}<br />
}</p>
<p>Handy References<br />
Official Apple How-To&#8217;s<br />
Learn Objective-C</p>
<h3><span style="font-weight: normal;">출처 : http://www.iphoneexamples.com/</span></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.ucstory.com/blog/archives/206/feed</wfw:commentRss>
		</item>
		<item>
		<title>XML parser with iPhone</title>
		<link>http://www.ucstory.com/blog/archives/203</link>
		<comments>http://www.ucstory.com/blog/archives/203#comments</comments>
		<pubDate>Tue, 19 May 2009 16:00:59 +0000</pubDate>
		<dc:creator>cplus98</dc:creator>
		
		<category><![CDATA[iPhone Development]]></category>

		<category><![CDATA[iPhone]]></category>

		<category><![CDATA[XML 파서]]></category>

		<guid isPermaLink="false">http://www.ucstory.com/blog/?p=203</guid>
		<description><![CDATA[iPhone에서 제공하는 xml 파서
해더파일 설정 및 라이브러리 설정 방법
http://cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html
]]></description>
			<content:encoded><![CDATA[<img style='float: right; margin-left: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=d67534d277cf0b173a00c1ff5b35c35d&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=60 height=60/><p>iPhone에서 제공하는 xml 파서</p>
<p>해더파일 설정 및 라이브러리 설정 방법</p>
<p><a class="con_link" href="http://cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html" target="_blank">http://cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ucstory.com/blog/archives/203/feed</wfw:commentRss>
		</item>
		<item>
		<title>iPhone 2nd 사양</title>
		<link>http://www.ucstory.com/blog/archives/201</link>
		<comments>http://www.ucstory.com/blog/archives/201#comments</comments>
		<pubDate>Tue, 19 May 2009 15:59:02 +0000</pubDate>
		<dc:creator>cplus98</dc:creator>
		
		<category><![CDATA[iPhone Development]]></category>

		<category><![CDATA[iPhone 사양]]></category>

		<guid isPermaLink="false">http://www.ucstory.com/blog/?p=201</guid>
		<description><![CDATA[&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
textures
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
1. min size
=&#62; 8&#215;8
2. max size
=&#62; 1024&#215;1024
3. alpha allowed
=&#62; yes, but suggest using alpha masks when performance is needed
4. normal mapping
=&#62; no (no shaders, and only 2 texture slots)
5. specular mapping
=&#62; no (no shaders, and only 2 texture slots)
6. burst, saturate, modulate etc.
=&#62; modulate and saturate only, when not using lightmaps (because only 2 texture [...]]]></description>
			<content:encoded><![CDATA[<img style='float: right; margin-left: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=d67534d277cf0b173a00c1ff5b35c35d&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=60 height=60/><p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
textures<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>1. min size<br />
=&gt; 8&#215;8</p>
<p>2. max size<br />
=&gt; 1024&#215;1024</p>
<p>3. alpha allowed<br />
=&gt; yes, but suggest using alpha masks when performance is needed</p>
<p>4. normal mapping<br />
=&gt; no (no shaders, and only 2 texture slots)</p>
<p>5. specular mapping<br />
=&gt; no (no shaders, and only 2 texture slots)</p>
<p>6. burst, saturate, modulate etc.<br />
=&gt; modulate and saturate only, when not using lightmaps (because only 2 texture slots)</p>
<p>7. environment/sphere mapping<br />
=&gt; Unfortunately not</p>
<p>8. texture clips<br />
=&gt; yes</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
shadows<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>1. dynamic shadows possible<br />
2. dynamic shadow resolution (512-&gt;4096)<br />
3. impact on performance (forest with dynamic shadows on every tree possible or not)<br />
=&gt; not supported, could be possible but would be too slow&#8230; must use &#8220;fake shadows&#8221; instead.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
in-game video<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>1. size<br />
2. framerate<br />
3. codec/compression<br />
=&gt; not supported in current firmware&#8230; really hope Apple will open the functionality one day&#8230; (only way to play movies is by using their media player, fullscreen only, with playback controls when touching the screen)</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
sound<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>1. max length<br />
=&gt; unlimited if a Music (because using steaming), but quite slow. Suggest using Sounds, with short sounds (max 10sec)</p>
<p>2. count limit per sound bank<br />
=&gt; unlimited</p>
<p>3. samplerate, bitrate<br />
=&gt; 16bits, mono, 44100 Hz or less (lesser will be faster)</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
particle systems<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>1. max particle count per scene<br />
=&gt; depends on the screen size of the particles (alpha blending limitations)</p>
<p>2. max particle count per emitter<br />
=&gt; no more than 256 if you want good performances, but again it depends on the screen size f the particles</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
poly count, animation<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>1. max polys visible at the same time<br />
=&gt; 7.000 for a gool frame rate, but tested with lot more, and it &#8220;works&#8221; (don&#8217;t crash)</p>
<p>2. max polys per scene<br />
=&gt; limited to 24Mb Texture + Vertex Buffers memory</p>
<p>3. max poly per object<br />
=&gt; depends on the number of visible objects, but again, &#8220;lesser is better&#8221; <img style="border: 0px none; vertical-align: middle;" src="http://developer.stonetrip.com/components/com_fireboard/template/default/images/english/emoticons/smile.png" alt="" /></p>
<p>4. animation limit per anim bank<br />
=&gt; none</p>
<p>5. bones count limit<br />
=&gt; &#8220;lesser is better&#8221; but no limitations (from 0 to 16 is a good value)</p>
<p>6. bones per vertex limit<br />
=&gt; really try to use 1 or 2, but limited to 4.</p>
<p>참고 : <a href="http://developer.stonetrip.com/index.php?option=com_fireboard&amp;Itemid=2&amp;func=view&amp;id=5755&amp;catid=39&amp;limit=6&amp;limitstart=0">http://developer.stonetrip.com/index.php?option=com_fireboard&amp;Itemid=2&amp;func=view&amp;id=5755&amp;catid=39&amp;limit=6&amp;limitstart=0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ucstory.com/blog/archives/201/feed</wfw:commentRss>
		</item>
		<item>
		<title>저작권 문제없이 사용할 수 있는 효과음</title>
		<link>http://www.ucstory.com/blog/archives/196</link>
		<comments>http://www.ucstory.com/blog/archives/196#comments</comments>
		<pubDate>Wed, 29 Apr 2009 17:52:50 +0000</pubDate>
		<dc:creator>cplus98</dc:creator>
		
		<category><![CDATA[미분류]]></category>

		<category><![CDATA[무료]]></category>

		<category><![CDATA[저작권]]></category>

		<category><![CDATA[효과음]]></category>

		<guid isPermaLink="false">http://www.ucstory.com/blog/?p=196</guid>
		<description><![CDATA[저작권 문제없는 음원을 다운로드 할 수 있다.
http://www.freesound.org/

www.soundsnap.com
www.soundsnap.com은 회원가입시 월 5건의 오디오 클립을 무료도 다운로드 할 수 있다.
또한 월 정액으로 무한정 받을 수도있다.
편법으로는 미리듣기 기능은 제약없이 사용할 수 있으므로
Soundflower 와 같은 오디오 캡쳐 프로그램 (프리웨어)을 사용하여 받을 수도 있다.
음원 소스가 MP3 라면 switch와 같은 프리웨어를 이용해서 변환시킬 수 있다.
음원 편집은 Adobe Soundbooth Trial 버전으로 해결할 수 있다.
(자체적으로 [...]]]></description>
			<content:encoded><![CDATA[<img style='float: right; margin-left: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=d67534d277cf0b173a00c1ff5b35c35d&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=60 height=60/><p>저작권 문제없는 음원을 다운로드 할 수 있다.</p>
<p><a href="http://www.freesound.org/" target="_blank">http://www.freesound.org/<br />
</a></p>
<p><a class="con_link" href="http://www.soundsnap.com/" target="_blank">www.soundsnap.com</a></p>
<p>www.soundsnap.com은 회원가입시 월 5건의 오디오 클립을 무료도 다운로드 할 수 있다.</p>
<p>또한 월 정액으로 무한정 받을 수도있다.</p>
<p>편법으로는 미리듣기 기능은 제약없이 사용할 수 있으므로</p>
<p><a class="con_link" href="http://www.cycling74.com/downloads/soundflower" target="_blank">Soundflower</a> 와 같은 오디오 캡쳐 프로그램 (프리웨어)을 사용하여 받을 수도 있다.</p>
<p>음원 소스가 MP3 라면 <a class="con_link" href="http://www.nch.com.au/switch/index.html" target="_blank">switch</a>와 같은 프리웨어를 이용해서 변환시킬 수 있다.</p>
<p>음원 편집은 Adobe Soundbooth Trial 버전으로 해결할 수 있다.</p>
<p>(자체적으로 제공되는 오디오 클립도 함께 쓸 수 있어서 편하다)</p>
<p>iPhone SDK에서 System Audio Services로 처리할 수 있는 짧은 효과음은 다음과 같은 조건을 갖는다.</p>
<p>- 30초 이내여야 할 것</p>
<p>- 확장자가 .caf, .aif, .wav 중 하나일 것</p>
<p>- 오디오 포맷이 PCM 혹은 IMA/ADPCM (IMA4) 일 것</p>
<p>경험상 caf 나 aif 보다는 wav 가 사용하기 훨씬 수월했고,</p>
<p>mono, 16bit, 22k 형태로 저장하면 음질과 용량 측면에서 적절한 것 같다.</p>
<div class="autosourcing-stub">
<p style="margin: 11px 0pt 7px; padding: 0pt; font-size: 12px; font-family: Dotum; font-style: normal; font-weight: normal;">
<p style="margin: 11px 0pt 7px; padding: 0pt; font-size: 12px; font-family: Dotum; font-style: normal; font-weight: normal;"><strong style="padding: 0pt 7px 0pt 0pt;">[참고]</strong> <a href="http://blog.naver.com/fpenguin/62439589" target="_blank">저작권 문제없이 사용할 수 있는 효과음</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.ucstory.com/blog/archives/196/feed</wfw:commentRss>
		</item>
		<item>
		<title>효과음 제작도구</title>
		<link>http://www.ucstory.com/blog/archives/193</link>
		<comments>http://www.ucstory.com/blog/archives/193#comments</comments>
		<pubDate>Tue, 28 Apr 2009 04:27:15 +0000</pubDate>
		<dc:creator>cplus98</dc:creator>
		
		<category><![CDATA[미분류]]></category>

		<category><![CDATA[효과음]]></category>

		<guid isPermaLink="false">http://www.ucstory.com/blog/?p=193</guid>
		<description><![CDATA[http://thirdcog.eu/apps/cfxr
간단한 효과음을 만드는데 좋다.
]]></description>
			<content:encoded><![CDATA[<img style='float: right; margin-left: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=d67534d277cf0b173a00c1ff5b35c35d&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=60 height=60/><p><a href="http://thirdcog.eu/apps/cfxr" target="_blank">http://thirdcog.eu/apps/cfxr</a></p>
<p>간단한 효과음을 만드는데 좋다.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ucstory.com/blog/archives/193/feed</wfw:commentRss>
		</item>
		<item>
		<title>코드기어스 반역의 루루슈 R2</title>
		<link>http://www.ucstory.com/blog/archives/185</link>
		<comments>http://www.ucstory.com/blog/archives/185#comments</comments>
		<pubDate>Wed, 22 Apr 2009 02:00:24 +0000</pubDate>
		<dc:creator>nekokoro</dc:creator>
		
		<category><![CDATA[Review]]></category>

		<category><![CDATA[애니]]></category>

		<category><![CDATA[애니메이션]]></category>

		<guid isPermaLink="false">http://www.ucstory.com/blog/?p=185</guid>
		<description><![CDATA[
코드기어스 반역의 루루슈 R2
우와~ 이거 정말 명작중의 명작이네요.
계속 보면서 이거 도대체 어떻게 끝날 것인가 궁금하면서도 절대 만족스러운 결말은 안될 것이라 생각했습니다.
그런데 이거 정말 최고네요.
정말 제가 생각했던 진정한 평화를 만드는 방법을 실현시키는 이야기가 될줄이야 꿈에도 몰랐습니다.
이런 류의 스토리는 대부분 끝이 감당이 안되서 대충 포기하기 때문에 코드기어스도 마찬가지일꺼라 생각했는데 이거 정말 너무 미안할 정도입니다.
이미 1기에서 너무 대충 [...]]]></description>
			<content:encoded><![CDATA[<img style='float: right; margin-left: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=1a7f0b0ef8f76ac8598379dc712e2fa5&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=60 height=60/><p><img class="aligncenter size-medium wp-image-186" title="ecbd94eb939ceab8b0ec96b4ec8aa4-ebb098ec97adec9d98eba5bceba5b4ec8a88r2" src="http://www.ucstory.com/blog/wp-content/uploads/2009/04/ecbd94eb939ceab8b0ec96b4ec8aa4-ebb098ec97adec9d98eba5bceba5b4ec8a88r2-479x270.jpg" alt="ecbd94eb939ceab8b0ec96b4ec8aa4-ebb098ec97adec9d98eba5bceba5b4ec8a88r2" width="479" height="270" /></p>
<p>코드기어스 반역의 루루슈 R2</p>
<p>우와~ 이거 정말 명작중의 명작이네요.<br />
계속 보면서 이거 도대체 어떻게 끝날 것인가 궁금하면서도 절대 만족스러운 결말은 안될 것이라 생각했습니다.<br />
그런데 이거 정말 최고네요.<br />
정말 제가 생각했던 <strong>진정한 평화</strong>를 만드는 방법을 실현시키는 이야기가 될줄이야 꿈에도 몰랐습니다.<br />
이런 류의 스토리는 대부분 끝이 감당이 안되서 대충 포기하기 때문에 코드기어스도 마찬가지일꺼라 생각했는데 이거 정말 너무 미안할 정도입니다.<br />
이미 1기에서 너무 대충 끝내버리고 2기 시작도 이상해서 기대를 안했었는데 전체적으로 보았을 때 이거 상당한 물건이네요.<br />
안보신분들에게 강력하게 추천합니다.</p>
<p>점수 ★★★★★</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ucstory.com/blog/archives/185/feed</wfw:commentRss>
		</item>
		<item>
		<title>코드기어스 반역의 루루슈</title>
		<link>http://www.ucstory.com/blog/archives/180</link>
		<comments>http://www.ucstory.com/blog/archives/180#comments</comments>
		<pubDate>Tue, 14 Apr 2009 02:00:30 +0000</pubDate>
		<dc:creator>nekokoro</dc:creator>
		
		<category><![CDATA[Review]]></category>

		<category><![CDATA[애니메이션]]></category>

		<guid isPermaLink="false">http://www.ucstory.com/blog/?p=180</guid>
		<description><![CDATA[
코드기어스 반역의 루루슈
최근에 아주 재미있게 보고 있는 애니메이션이다.
스토리는 부리타니아 공화국에 의해 식민지화된 일본에서 주인공이 대드는 이야기이다.
특히 재미있다고 느낀 부분은 주인공이 직접 싸운다기 보다는 지휘를 하고 정치를 해서 싸워간다는 점이다.
데스노트의 주인공과 비슷한 느낌이 난다.
좀 광기가 있으면서 너무 똑똑하고 비정상적인 힘을 가지고 있다는 점이 특히 그렇다.
문제는 1기가 25화까지 있는데 반해 설정이나 세계관이 너무 방대하다.
그럼에도 불구하고 진행속도가 너무 [...]]]></description>
			<content:encoded><![CDATA[<img style='float: right; margin-left: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=1a7f0b0ef8f76ac8598379dc712e2fa5&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=60 height=60/><p><img class="aligncenter size-medium wp-image-181" title="codegeass" src="http://www.ucstory.com/blog/wp-content/uploads/2009/04/codegeass-480x360.jpg" alt="codegeass" width="480" height="360" /></p>
<p>코드기어스 반역의 루루슈</p>
<p>최근에 아주 재미있게 보고 있는 애니메이션이다.<br />
스토리는 부리타니아 공화국에 의해 식민지화된 일본에서 주인공이 대드는 이야기이다.<br />
특히 재미있다고 느낀 부분은 주인공이 직접 싸운다기 보다는 지휘를 하고 정치를 해서 싸워간다는 점이다.<br />
데스노트의 주인공과 비슷한 느낌이 난다.<br />
좀 광기가 있으면서 너무 똑똑하고 비정상적인 힘을 가지고 있다는 점이 특히 그렇다.<br />
문제는 1기가 25화까지 있는데 반해 설정이나 세계관이 너무 방대하다.<br />
그럼에도 불구하고 진행속도가 너무 느려서 좀 지루한감이 느껴질 수 밖에 없다.<br />
또 주인공에게 특수한 능력을 부여해준 C.C.라는 캐릭터는 존재부터가 의문투성인데 뭐하나 알려줄 생각이 없어 보인다.<br />
작가가 귀찮아서 아예 무시하고 건너갈 정도로 할 이야기거리가 많다.<br />
그래서인지 좀 대충대충 끝나버린 이야기들이 많다는 것이 아쉽다.<br />
최소한 데스노트처럼 신세계의 신이 된다는 표현하기도 힘든 결말보다는 좀 현실적이어서 주인공이 죽든 목적을 달성하든 전혀 다른 스토리로 가든 전부 괜찮은 결말이 될 것 같아 안심이다.<br />
식민지 이야기가 나와서인지 일본과 한국의 관계가 겹쳐보이기도 한다.<br />
복잡 장대하면서 흥미진진한 스토리를 원하는 사람에게 추천하는 애니이다.</p>
<p>점수 ★★★★☆</p>
<p>이미지 출처 : http://blog.goo.ne.jp/aahg7380</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ucstory.com/blog/archives/180/feed</wfw:commentRss>
		</item>
		<item>
		<title>iPhone Provisioning</title>
		<link>http://www.ucstory.com/blog/archives/175</link>
		<comments>http://www.ucstory.com/blog/archives/175#comments</comments>
		<pubDate>Wed, 08 Apr 2009 10:47:53 +0000</pubDate>
		<dc:creator>cplus98</dc:creator>
		
		<category><![CDATA[iPhone Development]]></category>

		<category><![CDATA[iPhone Distribution]]></category>

		<category><![CDATA[iPhone Provisioning]]></category>

		<guid isPermaLink="false">http://www.ucstory.com/blog/?p=175</guid>
		<description><![CDATA[http://www.24100.net/2009/02/iphone-sdk-mobile-provisioning-0xe800003a-0xe8000001/
Gooooooooooooooood~!
]]></description>
			<content:encoded><![CDATA[<img style='float: right; margin-left: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=d67534d277cf0b173a00c1ff5b35c35d&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=60 height=60/><p><a href="http://www.24100.net/2009/02/iphone-sdk-mobile-provisioning-0xe800003a-0xe8000001/">http://www.24100.net/2009/02/iphone-sdk-mobile-provisioning-0xe800003a-0xe8000001/</a></p>
<p>Gooooooooooooooood~!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ucstory.com/blog/archives/175/feed</wfw:commentRss>
		</item>
		<item>
		<title>Cocos 2D 관련 링크들</title>
		<link>http://www.ucstory.com/blog/archives/173</link>
		<comments>http://www.ucstory.com/blog/archives/173#comments</comments>
		<pubDate>Wed, 08 Apr 2009 04:24:58 +0000</pubDate>
		<dc:creator>cplus98</dc:creator>
		
		<category><![CDATA[iPhone Development]]></category>

		<category><![CDATA[Cocos 2D]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.ucstory.com/blog/?p=173</guid>
		<description><![CDATA[Google code - Project Home
http://code.google.com/p/cocos2d-iphone/
Monocle studios - Cocos2d White paper
http://monoclestudios.com/cocos2d_whitepaper.html
Xcode Template
http://iphonesdkdev.blogspot.com/2009/01/xcode-template-for-cocos2d.html
Google code - Chipmunk
http://code.google.com/p/chipmunk-physics/
Chipmunk Dynamics
http://files.slembcke.net/chipmunk/chipmunk-docs.html
Etc.
http://groups.google.com/group/cocos2d-iphone-discuss/web/sample-games?pli=1
]]></description>
			<content:encoded><![CDATA[<img style='float: right; margin-left: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=d67534d277cf0b173a00c1ff5b35c35d&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=60 height=60/><p>Google code - Project Home<br />
<a href="http://code.google.com/p/cocos2d-iphone/" target="_blank">http://code.google.com/p/cocos2d-iphone/</a></p>
<p>Monocle studios - Cocos2d White paper<br />
<a href="http://monoclestudios.com/cocos2d_whitepaper.html" target="_blank">http://monoclestudios.com/cocos2d_whitepaper.html</a></p>
<p>Xcode Template<br />
<a href="http://iphonesdkdev.blogspot.com/2009/01/xcode-template-for-cocos2d.html" target="_blank">http://iphonesdkdev.blogspot.com/2009/01/xcode-template-for-cocos2d.html</a></p>
<p>Google code - Chipmunk<br />
<a href="http://code.google.com/p/chipmunk-physics/" target="_blank">http://code.google.com/p/chipmunk-physics/</a></p>
<p>Chipmunk Dynamics<br />
<a href="http://files.slembcke.net/chipmunk/chipmunk-docs.html" target="_blank">http://files.slembcke.net/chipmunk/chipmunk-docs.html</a></p>
<p>Etc.<br />
<a href="http://groups.google.com/group/cocos2d-iphone-discuss/web/sample-games?pli=1" target="_blank">http://groups.google.com/group/cocos2d-iphone-discuss/web/sample-games?pli=1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ucstory.com/blog/archives/173/feed</wfw:commentRss>
		</item>
		<item>
		<title>개발 / 배포 전 알아두어야 할것들</title>
		<link>http://www.ucstory.com/blog/archives/169</link>
		<comments>http://www.ucstory.com/blog/archives/169#comments</comments>
		<pubDate>Wed, 08 Apr 2009 03:37:03 +0000</pubDate>
		<dc:creator>cplus98</dc:creator>
		
		<category><![CDATA[iPhone Development]]></category>

		<category><![CDATA[iPhone 배포]]></category>

		<guid isPermaLink="false">http://www.ucstory.com/blog/?p=169</guid>
		<description><![CDATA[1. 프로그램 등록에 필요한 메타데이터를 요구 하고 있습니다.

- 20자 이내의 어플리케이션 이름 (버젼 번호를 붙이지 않는다, iphone  ipod 등의이름을 붙이지 않는다)
- 4000자 이내의 어플리케이션 영문 설명
- 어디 디바이스로 만들어 졌는지 (iphone and/or iPod touch)
- 카테고리 지정
- 세켠드 카테고리 지정
- 게임등급 (게임에만 해당)
- Unique Version (What is it?)
- Application copyright holder (저작권자)
- End User License Agreement [...]]]></description>
			<content:encoded><![CDATA[<img style='float: right; margin-left: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=d67534d277cf0b173a00c1ff5b35c35d&amp;default=http://use.perl.org/images/pix.gif' alt='No Gravatar' width=60 height=60/><p><strong>1. 프로그램 등록에 필요한 메타데이터를 요구 하고 있습니다.<br />
</strong></p>
<p>- 20자 이내의 어플리케이션 이름 (버젼 번호를 붙이지 않는다, iphone  ipod 등의이름을 붙이지 않는다)<br />
- 4000자 이내의 어플리케이션 영문 설명<br />
- 어디 디바이스로 만들어 졌는지 (iphone and/or iPod touch)<br />
- 카테고리 지정<br />
- 세켠드 카테고리 지정<br />
- 게임등급 (게임에만 해당)<br />
- Unique Version (What is it?)<br />
- Application copyright holder (저작권자)<br />
- End User License Agreement (Optional) If a EULA is not provided, standard iTunes App Store EULA will be applied<br />
- 이메일 주소<br />
- Territories application to be distributed in<br />
- Application Availability Date<br />
- 어플리케이션 가격<br />
- Localization desired</p>
<p><strong>2. iPhone/iPod touch Home Screen icon</strong><br />
사이즈는 57*57 로 만듭니다.</p>
<p><strong>3. Large Application Icon</strong><br />
512*512, 72DPI, jpg,jpeg or tiff format</p>
<p><strong>4. 기본 스크린샷</strong><br />
- Store 에 보여지는 어플의 캡쳐 화면<br />
4.1. 320&#215;460 portrait (without status bar) minimum<br />
4.2. 480&#215;300 landscape (without status bar) minimum<br />
4.3. 320&#215;480 portrait (full screen)</p>
<p>자료 출쳐 : http://cafe.naver.com/mcbugi/6162</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ucstory.com/blog/archives/169/feed</wfw:commentRss>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 2.104 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-03-11 13:27:55 -->
