<?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>A Tasty Pixel » Blog &#187; Graphics</title>
	<atom:link href="http://atastypixel.com/blog/tag/graphics/feed/" rel="self" type="application/rss+xml" />
	<link>http://atastypixel.com/blog</link>
	<description></description>
	<lastBuildDate>Mon, 06 Feb 2012 15:08:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>iPhone/Mac animation for custom classes: Property animation for more than just CALayer</title>
		<link>http://atastypixel.com/blog/key-path-based-property-animation/</link>
		<comments>http://atastypixel.com/blog/key-path-based-property-animation/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 20:38:18 +0000</pubDate>
		<dc:creator>Michael Tyson</dc:creator>
				<category><![CDATA[Geekspeak]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://atastypixel.com/blog/key-path-based-property-animation/</guid>
		<description><![CDATA[An Objective-C class that provides similar functionality to CABasicAnimation, but works on any object.]]></description>
			<content:encoded><![CDATA[<p>I recently wrote a custom view &#8212; a 3D vintage-looking pull lever &#8212; that provided a continuous property to control the state.  I wanted to animated this smoothly, a-la CABasicAnimation, but couldn&#8217;t find a built-in way to do so.</p>

<p>So, I wrote a class that provides similar functionality to CABasicAnimation, but works on any object.  I thought I&#8217;d share it.</p>

<p>Features:</p>

<ul>
<li>From/to value settings (currently only supports <code>NSNumber</code> and scalar numeric types, but easily extendable)</li>
<li>Duration, delay settings</li>
<li>Timing functions: Linear, ease out, ease in, and ease in/ease out</li>
<li>Animation chaining (specify another configured animation for <code>chainedAnimation</code>, and it&#8217;ll be fired once the first animation completes)</li>
<li>Delegate notification of animation completion</li>
<li>Uses a single timer for smooth lock-step animation</li>
<li>Uses <code>CADisplayLink</code> if available, to update in sync with screen updates</li>
</ul>

<p>Use it like this:</p>


<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>startMyAnimation <span style="color: #002200;">&#123;</span>
  TPPropertyAnimation <span style="color: #002200;">*</span>animation <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>TPPropertyAnimation propertyAnimationWithKeyPath<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;state&quot;</span><span style="color: #002200;">&#93;</span>;
  animation.toValue <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSNumber</span> numberWithFloat<span style="color: #002200;">:</span><span style="color: #2400d9;">1.0</span><span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">// fromValue is taken from current value if not specified</span>
  animation.duration <span style="color: #002200;">=</span> <span style="color: #2400d9;">1.0</span>;
  animation.timing <span style="color: #002200;">=</span> TPPropertyAnimationTimingEaseIn;
  <span style="color: #002200;">&#91;</span>animation beginWithTarget<span style="color: #002200;">:</span>self<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>


<p>Make sure you also include the QuartzCore framework, used to access <code>CADisplayLink</code>, if it&#8217;s available.</p>

<p>It&#8217;s BSD-licensed.</p>

<p>Grab it here: 
<a href="http://atastypixel.com/blog/wp-content/uploads/2010/08/TPPropertyAnimation.zip" title="TPPropertyAnimation.zip">TPPropertyAnimation.zip</a></p>
 <img src="http://atastypixel.com/blog/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1973" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://atastypixel.com/blog/key-path-based-property-animation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Achieve smaller app downloads by replacing large PNGs with JPEG + mask</title>
		<link>http://atastypixel.com/blog/achieve-smaller-app-downloads-by-replacing-large-pngs-with-jpeg-mask/</link>
		<comments>http://atastypixel.com/blog/achieve-smaller-app-downloads-by-replacing-large-pngs-with-jpeg-mask/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 00:26:17 +0000</pubDate>
		<dc:creator>Michael Tyson</dc:creator>
				<category><![CDATA[Geekspeak]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Optimisation]]></category>

		<guid isPermaLink="false">http://atastypixel.com/blog/?p=1967</guid>
		<description><![CDATA[I&#8217;m using a transparent overlay on top of a fairly common interface element to make it look awesome. I originally did this with a transparent PNG, until I realised the PNG in question for the iPhone 4&#8242;s Retina display was truly massive, clocking in at 1 Mb. Why we don&#8217;t have common image format with [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m using a transparent overlay on top of a fairly common interface element to make it look awesome.  I originally did this with a transparent PNG, until I realised the PNG in question for the iPhone 4&#8242;s Retina display was truly massive, clocking in at 1 Mb.</p>

<p>Why we don&#8217;t have common image format with both transparency and lossy compression is beyond me, but there&#8217;s a relatively easy alternative: Using a JPEG and masking it with another JPEG.</p>

<p>Based on Rodney Aiglstorfer&#8217;s solution on <a href="http://iPhoneDeveloperTips.com/cocoa/how-to-mask-an-image.html">how to mask an image</a>, I derived a category on UIImage which would apply a mask to an image.  The method required a little tweaking to work with JPEG images &#8212; the <code>CGImageCreateWithMask</code> function won&#8217;t work correctly on source images that don&#8217;t have an alpha channel, so one has to create one first, from the original.  Jean Regisser figured out the <a href="http://pastie.org/418627">solution</a> which he presents in a comment on the above article, but it needs one more addition: A check on line 37 for <code>kCGImageAlphaNoneSkipLast</code>. <em>Update: Oh, and one more &#8211; kCGImageAlphaNoneSkipFirst</em></p>

<p>So, the complete category for applying a mask to a JPEG image, to achieve the same result as using a PNG but with less download time for your users:</p>

<p><span id="more-1967"></span></p>


<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// Header</span>
&nbsp;
<span style="color: #a61390;">@interface</span> UIImage <span style="color: #002200;">&#40;</span>TPAdditions<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UIImage<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>imageByMaskingUsingImage<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UIImage <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>maskImage;
<span style="color: #a61390;">@end</span>
&nbsp;
&nbsp;
<span style="color: #11740a; font-style: italic;">// Implementation</span>
&nbsp;
CGImageRef CopyImageAndAddAlphaChannel<span style="color: #002200;">&#40;</span>CGImageRef sourceImage<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
    CGImageRef retVal <span style="color: #002200;">=</span> <span style="color: #a61390;">NULL</span>;
&nbsp;
    <span style="color: #a61390;">size_t</span> width <span style="color: #002200;">=</span> CGImageGetWidth<span style="color: #002200;">&#40;</span>sourceImage<span style="color: #002200;">&#41;</span>;
    <span style="color: #a61390;">size_t</span> height <span style="color: #002200;">=</span> CGImageGetHeight<span style="color: #002200;">&#40;</span>sourceImage<span style="color: #002200;">&#41;</span>;
&nbsp;
    CGColorSpaceRef colorSpace <span style="color: #002200;">=</span> CGColorSpaceCreateDeviceRGB<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
    CGContextRef offscreenContext <span style="color: #002200;">=</span> CGBitmapContextCreate<span style="color: #002200;">&#40;</span><span style="color: #a61390;">NULL</span>, width, height, 
                                                          <span style="color: #2400d9;">8</span>, <span style="color: #2400d9;">0</span>, colorSpace, kCGImageAlphaPremultipliedFirst<span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>offscreenContext <span style="color: #002200;">!=</span> <span style="color: #a61390;">NULL</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        CGContextDrawImage<span style="color: #002200;">&#40;</span>offscreenContext, CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">0</span>, width, height<span style="color: #002200;">&#41;</span>, sourceImage<span style="color: #002200;">&#41;</span>;
&nbsp;
        retVal <span style="color: #002200;">=</span> CGBitmapContextCreateImage<span style="color: #002200;">&#40;</span>offscreenContext<span style="color: #002200;">&#41;</span>;
        CGContextRelease<span style="color: #002200;">&#40;</span>offscreenContext<span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#125;</span>
&nbsp;
    CGColorSpaceRelease<span style="color: #002200;">&#40;</span>colorSpace<span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #a61390;">return</span> retVal;
<span style="color: #002200;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@implementation</span> UIImage <span style="color: #002200;">&#40;</span>TPAdditions<span style="color: #002200;">&#41;</span>
&nbsp;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UIImage<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>imageByMaskingUsingImage<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UIImage <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>maskImage <span style="color: #002200;">&#123;</span>
&nbsp;
    CGImageRef maskRef <span style="color: #002200;">=</span> maskImage.CGImage; 
    CGImageRef mask <span style="color: #002200;">=</span> CGImageMaskCreate<span style="color: #002200;">&#40;</span>CGImageGetWidth<span style="color: #002200;">&#40;</span>maskRef<span style="color: #002200;">&#41;</span>,
                                        CGImageGetHeight<span style="color: #002200;">&#40;</span>maskRef<span style="color: #002200;">&#41;</span>,
                                        CGImageGetBitsPerComponent<span style="color: #002200;">&#40;</span>maskRef<span style="color: #002200;">&#41;</span>,
                                        CGImageGetBitsPerPixel<span style="color: #002200;">&#40;</span>maskRef<span style="color: #002200;">&#41;</span>,
                                        CGImageGetBytesPerRow<span style="color: #002200;">&#40;</span>maskRef<span style="color: #002200;">&#41;</span>,
                                        CGImageGetDataProvider<span style="color: #002200;">&#40;</span>maskRef<span style="color: #002200;">&#41;</span>, <span style="color: #a61390;">NULL</span>, <span style="color: #a61390;">false</span><span style="color: #002200;">&#41;</span>;
&nbsp;
    CGImageRef source <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self CGImage<span style="color: #002200;">&#93;</span>;
&nbsp;
    NSInteger alphaInfo <span style="color: #002200;">=</span> CGImageGetAlphaInfo<span style="color: #002200;">&#40;</span>source<span style="color: #002200;">&#41;</span>;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> alphaInfo <span style="color: #002200;">==</span> kCGImageAlphaNone || alphaInfo <span style="color: #002200;">==</span> kCGImageAlphaNoneSkipLast || alphaInfo <span style="color: #002200;">==</span> kCGImageAlphaNoneSkipFirst <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        source <span style="color: #002200;">=</span> CopyImageAndAddAlphaChannel<span style="color: #002200;">&#40;</span>source<span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#125;</span>
&nbsp;
    CGImageRef masked <span style="color: #002200;">=</span> CGImageCreateWithMask<span style="color: #002200;">&#40;</span>source, mask<span style="color: #002200;">&#41;</span>;
    CGImageRelease<span style="color: #002200;">&#40;</span>mask<span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> source <span style="color: #002200;">!=</span> <span style="color: #002200;">&#91;</span>self CGImage<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        CGImageRelease<span style="color: #002200;">&#40;</span>source<span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#125;</span>
&nbsp;
    UIImage <span style="color: #002200;">*</span>result;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>UIImage respondsToSelector<span style="color: #002200;">:</span><span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>imageWithCGImage<span style="color: #002200;">:</span>scale<span style="color: #002200;">:</span>orientation<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        result <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>UIImage imageWithCGImage<span style="color: #002200;">:</span>masked scale<span style="color: #002200;">:</span>self.scale orientation<span style="color: #002200;">:</span>self.imageOrientation<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span>
        result <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>UIImage imageWithCGImage<span style="color: #002200;">:</span>masked<span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
&nbsp;
    CGImageRelease<span style="color: #002200;">&#40;</span>masked<span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #a61390;">return</span> result;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>


<p>Note that the image mask should be another JPEG (or PNG, if you really like), without transparency, and greyscale, where black represents full opacity, and white represents full transparency.</p>
 <img src="http://atastypixel.com/blog/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1967" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://atastypixel.com/blog/achieve-smaller-app-downloads-by-replacing-large-pngs-with-jpeg-mask/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Making UIToolbar and UINavigationBar&#8217;s background totally transparent</title>
		<link>http://atastypixel.com/blog/making-uitoolbar-and-uinavigationbars-background-totally-transparent/</link>
		<comments>http://atastypixel.com/blog/making-uitoolbar-and-uinavigationbars-background-totally-transparent/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 10:14:02 +0000</pubDate>
		<dc:creator>Michael Tyson</dc:creator>
				<category><![CDATA[Geekspeak]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://atastypixel.com/blog/?p=1959</guid>
		<description><![CDATA[Technique to make the background of UIToolbar and UINavigationBar transparent, for custom interfaces]]></description>
			<content:encoded><![CDATA[<p>I have an upcoming iPhone application, <a href="http://atastypixel.com/products/cartographer">Cartographer</a>, that is highly stylised and requires high customisation of the interface to achieve a convincing, beautiful vintage look.  To make it work, I needed transparent toolbars and navigation bars for my UIViewController-based views.</p>

<p>The solution I came up with for this was to implement a category on UINavigationBar and UIToolbar, and overriding <code>drawRect:</code> with a method that does absolutely nothing.  Then I can place my own textures behind the bar, and they&#8217;ll be seen, instead of the default bar background.<span id="more-1959"></span></p>


<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@interface</span> UINavigationBar <span style="color: #002200;">&#40;</span>TransparentAdditions<span style="color: #002200;">&#41;</span>
<span style="color: #a61390;">@end</span>
<span style="color: #a61390;">@implementation</span> UINavigationBar <span style="color: #002200;">&#40;</span>TransparentAdditions<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>drawRect<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>CGRect<span style="color: #002200;">&#41;</span>rect <span style="color: #002200;">&#123;</span>
    <span style="color: #11740a; font-style: italic;">// Do nothing!</span>
<span style="color: #002200;">&#125;</span>
<span style="color: #a61390;">@end</span></pre></div></div>


<p>For UIToolBar, if you&#8217;re using it within a UINavigationController, you&#8217;ll want to also override <code>drawLayer:inContext:</code>, as this appears to be used instead of <code>drawRect:</code> when used within a navigation controller, for some weird reason.</p>

<p>Note that this method will affect <em>all</em> bars in your app. If you only want <em>some</em> bars to be transparent, you&#8217;ll need to do a little objc-hocus-pocus.  Thanks to Mike Ash for this solution on <a href="http://www.mikeash.com/pyblog/friday-qa-2010-01-29-method-replacement-for-fun-and-profit.html">method replacement</a> (read that article for the whys and hows).  This technique replaces the default methods as before, but keeps track of the defaults.  If you now set the <code>tintColor</code> of the bar to <code>[UIColor clearColor]</code>, the bar will have a transparent background.  Otherwise, it&#8217;ll just look the same as usual.</p>

<p>For UIToolbar (same principle for UINavigationBar):</p>


<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &lt;objc/runtime.h&gt;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// Keep track of default implementation</span>
<span style="color: #a61390;">static</span> <span style="color: #a61390;">void</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">*</span>_origDrawRect<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span>, <span style="color: #a61390;">SEL</span>, CGRect<span style="color: #002200;">&#41;</span>;
<span style="color: #a61390;">static</span> <span style="color: #a61390;">void</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">*</span>_origDrawLayerInContext<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span>, <span style="color: #a61390;">SEL</span>, CALayer<span style="color: #002200;">*</span>, CGContextRef<span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// Override for drawRect:</span>
<span style="color: #a61390;">static</span> <span style="color: #a61390;">void</span> OverrideDrawRect<span style="color: #002200;">&#40;</span>UIToolbar <span style="color: #002200;">*</span>self, <span style="color: #a61390;">SEL</span> _cmd, CGRect r<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self tintColor<span style="color: #002200;">&#93;</span> isEqual<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>UIColor clearColor<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        <span style="color: #11740a; font-style: italic;">// Do nothing</span>
    <span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span>
        <span style="color: #11740a; font-style: italic;">// Call default method</span>
        _origDrawRect<span style="color: #002200;">&#40;</span>self, _cmd, r<span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// Override for drawLayer:inContext:</span>
<span style="color: #a61390;">static</span> <span style="color: #a61390;">void</span> OverrideDrawLayerInContext<span style="color: #002200;">&#40;</span>UIToolbar <span style="color: #002200;">*</span>self, <span style="color: #a61390;">SEL</span> _cmd, CALayer <span style="color: #002200;">*</span>layer, CGContextRef context<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self tintColor<span style="color: #002200;">&#93;</span> isEqual<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>UIColor clearColor<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        <span style="color: #11740a; font-style: italic;">// Do nothing</span>
    <span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span>
        <span style="color: #11740a; font-style: italic;">// Call default method</span>
        _origDrawLayerInContext<span style="color: #002200;">&#40;</span>self, _cmd, layer, context<span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@implementation</span> UIToolbar <span style="color: #002200;">&#40;</span>TransparentAdditions<span style="color: #002200;">&#41;</span>
&nbsp;
<span style="color: #002200;">+</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>load <span style="color: #002200;">&#123;</span>
    <span style="color: #11740a; font-style: italic;">// Replace methods, keeping originals</span>
    Method origMethod <span style="color: #002200;">=</span> class_getInstanceMethod<span style="color: #002200;">&#40;</span>self, <span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>drawRect<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>;
    _origDrawRect <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>method_getImplementation<span style="color: #002200;">&#40;</span>origMethod<span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span><span style="color: #002200;">!</span>class_addMethod<span style="color: #002200;">&#40;</span>self, <span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>drawRect<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span>, <span style="color: #002200;">&#40;</span><span style="color: #a61390;">IMP</span><span style="color: #002200;">&#41;</span>OverrideDrawRect, method_getTypeEncoding<span style="color: #002200;">&#40;</span>origMethod<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>
        method_setImplementation<span style="color: #002200;">&#40;</span>origMethod, <span style="color: #002200;">&#40;</span><span style="color: #a61390;">IMP</span><span style="color: #002200;">&#41;</span>OverrideDrawRect<span style="color: #002200;">&#41;</span>;
&nbsp;
    origMethod <span style="color: #002200;">=</span> class_getInstanceMethod<span style="color: #002200;">&#40;</span>self, <span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>drawLayer<span style="color: #002200;">:</span>inContext<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>;
    _origDrawLayerInContext <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>method_getImplementation<span style="color: #002200;">&#40;</span>origMethod<span style="color: #002200;">&#41;</span>;
&nbsp;
    <span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span><span style="color: #002200;">!</span>class_addMethod<span style="color: #002200;">&#40;</span>self, <span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span>drawLayer<span style="color: #002200;">:</span>inContext<span style="color: #002200;">:</span><span style="color: #002200;">&#41;</span>, <span style="color: #002200;">&#40;</span><span style="color: #a61390;">IMP</span><span style="color: #002200;">&#41;</span>OverrideDrawLayerInContext, method_getTypeEncoding<span style="color: #002200;">&#40;</span>origMethod<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>
        method_setImplementation<span style="color: #002200;">&#40;</span>origMethod, <span style="color: #002200;">&#40;</span><span style="color: #a61390;">IMP</span><span style="color: #002200;">&#41;</span>OverrideDrawLayerInContext<span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>


<p>You can now add background texture to the bars in a number of ways. These are two I&#8217;ve used:</p>

<ul>
<li>By adding a CALayer to <code>[bar layer]</code> &#8212; but note that UINavigationBar will try to add elements at index 0, underneath your background.  To make this work, I provided a subclassed CALayer (and overrode UINavigationBar&#8217;s <code>+layer</code> method) which only lets <em>you</em> insert layers at index 0, via a custom method, and override <code>insertLayer:atIndex:</code> method, setting index to 1 if it&#8217;s 0.  UIToolbar doesn&#8217;t require this.</li>
<li>Or, by adding a CALayer to your view layer.  Note that the view&#8217;s bounds do not cover the UINavigationBar; I had to offset the layer by the height of the bar in question (<code>navigationBarLayer.frame = CGRectMake(0, -self.navigationController.navigationBar.frame.size.height, [barImage size].width, [barImage size].height);</code>, for example), and set <code>self.view.clipsToBounds = NO</code> to allow the layer to be seen.</li>
</ul>

<p>Of course, you can also draw the texture in <code>drawRect:</code>, instead.  It&#8217;s entirely up to you.  The advantage in using a <code>CALayer</code> is that it can overlap the view boundary, for effects like drop shadows.</p>

<p><img src="http://atastypixel.com/blog/wp-content/uploads/2010/07/201007191118.jpg" width="320" height="84" alt="201007191118.jpg" class="aligncenter" /></p>
 <img src="http://atastypixel.com/blog/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1959" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://atastypixel.com/blog/making-uitoolbar-and-uinavigationbars-background-totally-transparent/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>UIImage, resolution independence and the iPhone 4&#8242;s Retina display</title>
		<link>http://atastypixel.com/blog/uiimage-resolution-independence-and-the-iphone-4s-retina-display/</link>
		<comments>http://atastypixel.com/blog/uiimage-resolution-independence-and-the-iphone-4s-retina-display/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 13:43:19 +0000</pubDate>
		<dc:creator>Michael Tyson</dc:creator>
				<category><![CDATA[Geekspeak]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://atastypixel.com/blog/?p=1951</guid>
		<description><![CDATA[iOS4 caters for the high-resolution Retina display that comes with the iPhone 4 by some rather clever abstraction, that moves away from the concept of &#8216;pixels&#8217;, and instead uses &#8216;points&#8217;, which are resolution-independent. So, when you display an image that&#8217;s been prepared for the Retina display, it&#8217;s represented with a scale factor of 2, meaning [...]]]></description>
			<content:encoded><![CDATA[<p>iOS4 caters for the high-resolution Retina display that comes with the iPhone 4 by some rather clever abstraction, that moves away from the concept of &#8216;pixels&#8217;, and instead uses &#8216;points&#8217;, which are resolution-independent.</p>

<p>So, when you display an image that&#8217;s been prepared for the Retina display, it&#8217;s represented with a scale factor of 2, meaning that to your code, it appears to have the same dimensions, but in fact contains twice the information density.</p>

<p>iOS4&#8242;s UIImage makes it work by automatically looking for high-res images located alongside the prior &#8216;standard resolution&#8217; ones &#8212; identified by a &#8220;@2x&#8221; suffix to the filename.</p>

<p>This works great with <code>+[UIImage imageNamed:]</code>, but although the <a href="http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/SupportingResolutionIndependence/SupportingResolutionIndependence.html#//apple_ref/doc/uid/TP40007072-CH10-SW8">API documentation</a> says that other image loading methods will automatically load the @2x versions, they actually don&#8217;t.  Yeah.  Apple are working on it.</p>

<p>Until they sort themselves out, I&#8217;m using a convenience method sitting inside a UIImage category.  So, where I would previously use something like <code>[UIImage imageWithContentsOfFile:]</code>, I now use <code>[UIImage imageWithContentsOfResolutionIndependentFile:]</code>.</p>

<p><span id="more-1951"></span></p>

<p>Here&#8217;s the category:</p>


<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@interface</span> UIImage <span style="color: #002200;">&#40;</span>TPAdditions<span style="color: #002200;">&#41;</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>initWithContentsOfResolutionIndependentFile<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>path;
<span style="color: #002200;">+</span> <span style="color: #002200;">&#40;</span>UIImage<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>imageWithContentsOfResolutionIndependentFile<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>path;
<span style="color: #a61390;">@end</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@implementation</span> UIImage <span style="color: #002200;">&#40;</span>TPAdditions<span style="color: #002200;">&#41;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>initWithContentsOfResolutionIndependentFile<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>path <span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UIDevice currentDevice<span style="color: #002200;">&#93;</span> systemVersion<span style="color: #002200;">&#93;</span> intValue<span style="color: #002200;">&#93;</span> &gt;<span style="color: #002200;">=</span> <span style="color: #2400d9;">4</span> <span style="color: #002200;">&amp;&amp;</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UIScreen mainScreen<span style="color: #002200;">&#93;</span> scale<span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> <span style="color: #2400d9;">2.0</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        <span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span>path2x <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>path stringByDeletingLastPathComponent<span style="color: #002200;">&#93;</span> 
                            stringByAppendingPathComponent<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSString</span> stringWithFormat<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@@2x.%@&quot;</span>, 
                                                            <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>path lastPathComponent<span style="color: #002200;">&#93;</span> stringByDeletingPathExtension<span style="color: #002200;">&#93;</span>, 
                                                            <span style="color: #002200;">&#91;</span>path pathExtension<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
&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><span style="color: #400080;">NSFileManager</span> defaultManager<span style="color: #002200;">&#93;</span> fileExistsAtPath<span style="color: #002200;">:</span>path2x<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
            <span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span>self initWithCGImage<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UIImage imageWithData<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSData</span> dataWithContentsOfFile<span style="color: #002200;">:</span>path2x<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span> CGImage<span style="color: #002200;">&#93;</span> scale<span style="color: #002200;">:</span><span style="color: #2400d9;">2.0</span> orientation<span style="color: #002200;">:</span>UIImageOrientationUp<span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#125;</span>
    <span style="color: #002200;">&#125;</span>
&nbsp;
    <span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span>self initWithData<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSData</span> dataWithContentsOfFile<span style="color: #002200;">:</span>path<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">+</span> <span style="color: #002200;">&#40;</span>UIImage<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>imageWithContentsOfResolutionIndependentFile<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>path <span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UIImage alloc<span style="color: #002200;">&#93;</span> initWithContentsOfResolutionIndependentFile<span style="color: #002200;">:</span>path<span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>


<p>This checks to see whether the iOS4 features are present, so this code should work on devices running prior OS versions as well.</p>

<p>What iOS4&#8242;s <code>imageWithContentsOfFile</code> <em>does</em> do is recognise if an image is the &#8217;2x&#8217; version, and sets the <code>scale</code> accordingly, so it displays correctly.</p>

<p><strong>Update</strong>: I just discovered that <code>-[UIDevice scale]</code> <em>actually exists</em> prior to iOS 4.  Apple recommend using tests like <code>respondsToSelector</code> to determine OS features, rather than version checks, but in this case, it gives the wrong result that can result in some pretty hard to find bugs.  I&#8217;ve updated the above class to check the iOS version instead.</p>

<p>I&#8217;ve also avoided using <code>initWithContentsOfFile</code> entirely: As Tea mentioned in a comment below, we probably shouldn&#8217;t be trusting this method any more, as it does not behave as advertised.</p>

<p><strong>Update 2</strong>: I&#8217;ve been unable to replicate the problem, but a few commenters below noted issues with the 2x image being displayed at double-size.  I&#8217;ve now updated the above to explicitly set the scale to 2.0 for the 2x image, which should fix the problem.</p>

<p><img src="http://atastypixel.com/blog/wp-content/uploads/2010/06/201006261441.jpg" width="422" height="221" alt="Before and After resolution independence" class="aligncenter frame" /></p>
 <img src="http://atastypixel.com/blog/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1951" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://atastypixel.com/blog/uiimage-resolution-independence-and-the-iphone-4s-retina-display/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Links for February 25th through May 29th</title>
		<link>http://atastypixel.com/blog/links-february-25th-may-29th/</link>
		<comments>http://atastypixel.com/blog/links-february-25th-may-29th/#comments</comments>
		<pubDate>Sat, 29 May 2010 22:01:21 +0000</pubDate>
		<dc:creator>Michael Tyson</dc:creator>
				<category><![CDATA[Geekspeak]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Marketing]]></category>

		<guid isPermaLink="false">http://atastypixel.com/blog/?p=1849</guid>
		<description><![CDATA[Links for February 25th through May 29th: Implementing iBooks page curling using a conical deformation algorithm Excellent summary of how to implement a convincing page turn animation in OpenGL Multiplottr.com &#8212; Plot, save and share multiple locations on your own customized maps. Batch plot multiple addresses gmaps.kaeding.name :: Plot multiple locations on Google Maps Enter [...]]]></description>
			<content:encoded><![CDATA[<p>Links for February 25th through May 29th:</p>

<ul class="delicious-bookmarks">
<li><a href="http://wdnuon.blogspot.com/2010/05/implementing-ibooks-page-curling-using.html">Implementing iBooks page curling using a conical deformation algorithm</a> Excellent summary of how to implement a convincing page turn animation in OpenGL</li>
<li><a href="http://www.multiplottr.com/">Multiplottr.com &#8212; Plot, save and share multiple locations on your own customized maps.</a> Batch plot multiple addresses</li>
<li><a href="http://gmaps.kaeding.name/">gmaps.kaeding.name :: Plot multiple locations on Google Maps</a> Enter addresses, one per line, to plot all entries on a map at once</li>
<li><a href="http://www.onlinemarketingrant.com/free-iphone-app-marketing">Free iPhone App Marketing &mdash; Online and iPhone Marketing</a> Includes a useful list of review sites, blogs, etc.</li>
</ul>
 <img src="http://atastypixel.com/blog/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1849" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://atastypixel.com/blog/links-february-25th-may-29th/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sneak preview of my new web framework Michaelangelo</title>
		<link>http://atastypixel.com/blog/sneak-preview-of-my-new-web-framework-michaelangelo/</link>
		<comments>http://atastypixel.com/blog/sneak-preview-of-my-new-web-framework-michaelangelo/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 14:39:22 +0000</pubDate>
		<dc:creator>Michael Tyson</dc:creator>
				<category><![CDATA[Geekspeak]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://atastypixel.com/blog/2009/03/28/sneak-preview-of-my-new-web-framework-michaelangelo/</guid>
		<description><![CDATA[I&#8217;ve been working on a new web framework which provides image theming &#8211; a little like what Elegant Grunge does with its image frames, but much more sophisticated. For example: This is a PHP framework that uses the common GD library to manipulate images. It&#8217;s main interface is a content filter &#8211; give it HTML, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on a new web framework which provides image theming &#8211; a little like what <a href="http://atastypixel.com/blog/wordpress/themes/elegant-grunge">Elegant Grunge</a> does with its image frames, but much more sophisticated.</p>

<p>For example:
<img src="http://atastypixel.com/blog/wp-content/uploads/2009/03/boathouse.jpg" width="400" height="206" alt="boathouse.jpg" title="boathouse.jpg" class="aligncenter sticky-tape tape-corners noframe" /></p>

<p><img src="http://atastypixel.com/blog/wp-content/uploads/2009/03/city.jpg" width="400" alt="A dynamic caption" title="A dynamic caption" class="aligncenter polaroid rotation frame-title noframe" /></p>

<p><img src="http://atastypixel.com/blog/wp-content/uploads/2009/03/thailand.jpg" width="171" height="300" alt="thailand.jpg" title="thailand.jpg" class="alignright wood-frame noframe" /></p>

<p>This is a PHP framework that uses the common GD library to manipulate images.</p>

<p>It&#8217;s main interface is a content filter &#8211; give it HTML, containing images, and it will return the same HTML modified so that the images are now the converted versions, according to their &#8216;class&#8217; attributes, with appropriate width/height attributes, etc.  This makes it super easy to work with.</p>

<p>It stands alone, but it is also going to be a WordPress plugin (as you can see on this site, it&#8217;s already operational), a Joomla plugin, and I&#8217;m considering establishing a web service too, so those who don&#8217;t have adequate software on their server can still use it.</p>

<p><img src="http://atastypixel.com/blog/wp-content/uploads/2009/03/img-1773.jpg" width="300" height="200" alt="IMG_1773.jpg" title="IMG_1773.jpg" class="aligncenter wood-frame noframe" /></p>

<p>It has a plugin-based architecture so anyone can add new &#8216;themes&#8217; (<em>props to my partner Katherine for that beautiful wooden frame, by the way</em>).  I&#8217;m going to also implement a simple XML-based plugin schema, and possibly an interface to it, so that it&#8217;s easy to do so.  I&#8217;m planning a &#8216;community&#8217; style directory site to host contributed styles.</p>

<p>The base frame rendering code is such that it is trivially easy to add a new &#8216;theme&#8217;.  It extracts segments from a single frame image, and handles seamless tiling to make the frame the right dimensions, so you don&#8217;t even have to worry about overlapping regions.</p>

<p>I will release it soon, after adding a little more content &#8211; keep your eyes peeled.</p>

<p>For now, check out the <a href="http://atastypixel.com/blog/wp-content/plugins/michaelangelo/Michaelangelo/Sample">Michaelangelo showcase</a>, which gives an idea of the different styles, and contains an interactive sampler to play with styles (<em>IE users should stop being IE users to view this</em>).</p>

<p>Doing my bit to beautify the web.</p>
 <img src="http://atastypixel.com/blog/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1566" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://atastypixel.com/blog/sneak-preview-of-my-new-web-framework-michaelangelo/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Links for November 24th through December 9th</title>
		<link>http://atastypixel.com/blog/links-%datestart-december-9th/</link>
		<comments>http://atastypixel.com/blog/links-%datestart-december-9th/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 01:00:02 +0000</pubDate>
		<dc:creator>Michael Tyson</dc:creator>
				<category><![CDATA[Geekspeak]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Geocoding]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Location]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://atastypixel.com/blog/?p=1173</guid>
		<description><![CDATA[Links for November 24th through December 9th: Creating libraries for the iPhone Discussion on creating static libraries for the iPhone Photoshop Tutorials &#8211; Layered HDR Tone Mapping Learn how to tone map with Photoshop CS3 to create beautiful high dynamic range (HDR) photos. The final result is exceedingly better than Photoshop&#39;s local adaptation and similar [...]]]></description>
			<content:encoded><![CDATA[<p>Links for November 24th through December 9th:</p>

<ul class="delicious-bookmarks">
<li><a href="https://devforums.apple.com/message/5389">Creating libraries for the iPhone</a> Discussion on creating static libraries for the iPhone</li>
<li><a href="http://photoshoptutorials.ws/photoshop-tutorials/photo-manipulation/layered-hdr-tone-mapping.html">Photoshop Tutorials &#8211; Layered HDR Tone Mapping</a> Learn how to tone map with Photoshop CS3 to create beautiful high dynamic range (HDR) photos. The final result is exceedingly better than Photoshop&#39;s local adaptation and similar to Photomatix&#39;s tone mapping.</li>
<li><a href="http://www.ajaxload.info/">Ajaxload &#8211; Ajax loading gif generator</a> Generate loading animation images, given type, background and foreground.</li>
<li><a href="http://www.bittbox.com/freebies/free-texture-tuesday-inaugural/">Free Texture Tuesday  |  BittBox</a> &quot;Jay over at Bittbox has just announced that he will be giving away five high resolution textures (3,000 x 2,000 pixels) every Tuesday of the year, absolutely free!&quot;</li>
<li><a href="http://www.geonames.org/">GeoNames</a> Free service (including webservice) to search for place names, yielding co-ordinates and a feature class.</li>

</ul>
 <img src="http://atastypixel.com/blog/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1173" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://atastypixel.com/blog/links-%datestart-december-9th/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

