<?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>LocassaLocassa | Unique apps, app development, iPhone app developers</title>
	<atom:link href="http://locassa.com/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://locassa.com</link>
	<description>Unique apps, app development, iPhone app developers</description>
	<lastBuildDate>Sun, 05 Feb 2012 09:00:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mobile apps, touch interfaces, 3D&#8230; what&#8217;s next?</title>
		<link>http://locassa.com/index.php/mobile-apps-touch-interfaces-3d-next/</link>
		<comments>http://locassa.com/index.php/mobile-apps-touch-interfaces-3d-next/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 08:49:11 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Lifestyle]]></category>
		<category><![CDATA[User Interfaces]]></category>
		<guid isPermaLink="false">http://locassa.com/?p=1233</guid>
		<description><![CDATA[In 1968, Alan Kay of Xerox PARC designed what he called a “personal, portable information manipulator.” The device, which might be described as the overweight, ugly offspring of an iPad and a Blackberry, was dubbed the “Dynabook.” “Any sufficiently advanced technology is indistinguishable from magic.” Arthur C. Clarke How the world has changed in 30 [...]]]></description>
			<content:encoded><![CDATA[<p>In 1968, Alan Kay of Xerox PARC designed what he called a “personal, portable information manipulator.” The device, which might be described as the overweight, ugly offspring of an iPad and a Blackberry, was dubbed the “Dynabook.”</p>
<blockquote><p>
“Any sufficiently advanced technology is indistinguishable from magic.”<br />
<em>Arthur C. Clarke</em>
</p></blockquote>
<p>How the world has changed in 30 years. Given the advancement of iPhone development, iPad development, and mobile app development, bulky mobile computers are ancient history. From phones that do nearly everything except brush your teeth for you, to the ability to watch 3D even on your iPhone, our various “personal, portable information manipulator[s]” have utterly transformed the way we live, work, and play.</p>
<p>Having witnessed so many incredible developments in mobile technology over the last several years, what types of changes should we expect in the future? Here are a few ideas.</p>
<h2>Development of 3D Technology</h2>
<p>It&#8217;s sometimes hard to remember that the movie <i>Avatar</i> is only 2 1/2 years old. The movie ushered in a wave of 3D movies and 3D video games, but all without those silly, headache-inducing red and blue glasses.</p>
<p>New 3D technologies will not require glasses at all. However, these newer technologies are challenging for developers; the larger the screen, the harder it is to achieve a glasses-free 3D experience. That&#8217;s why 3D experts are looking at things like iPhone development and iPad development – mobile device screens are the perfect size for glasses-free 3D. According to ABI Research, a tech market intelligence company, 11% of mobile devices will offer glasses-free 3D technology by 2015.</p>
<h2>More Connected than Ever</h2>
<p>The original 1991 ad for the Mac PowerBook (you can view it on <a href="http://www.youtube.com/watch?v=U1hyA07V5lQ" title="YouTube">YouTube</a>) includes a woman who claims that the PowerBook allows her to always stay “connected.” Her idea of being “connected” is laughable today; after all, in 1991 Facebook founder Mark Zuckerberg was only seven years old and WiFi was still in the R&#038;D phase.</p>
<p>Twenty years later, app development that makes social networking, social gaming, and other ways of staying truly connected to networks and individuals shows no signs of slowing down. New connectivity trends to watch out for include:</p>
<ul>
<li>More games and apps using mobile devices&#8217; GPS
<li>More apps that use your friends&#8217; activities to make recommendations for you
<li>Games and interactive movies that use information from your social networking accounts will only get more popular
</ul>
<p>3D technology and new connectivity apps are just two of the many ways that mobile devices will evolve over the next several years. What else is coming our way? Only time will tell.</p>
]]></content:encoded>
			<wfw:commentRss>http://locassa.com/index.php/mobile-apps-touch-interfaces-3d-next/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile App Payments using NFC</title>
		<link>http://locassa.com/index.php/mobile-app-payments-using-nfc/</link>
		<comments>http://locassa.com/index.php/mobile-app-payments-using-nfc/#comments</comments>
		<pubDate>Sun, 04 Dec 2011 12:16:43 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Lifestyle]]></category>
		<category><![CDATA[Payments]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">http://www.locassa.com/?p=907</guid>
		<description><![CDATA[On November 17, 2011, 45 mobile phone carriers around the world committed their product roadmap to using NFC technology for mobile payments. As part of this commitment, the operators would have to abide by a new set of design specifications. If these specifications become commonplace, future mobile phones would automatically have the capacity to make [...]]]></description>
			<content:encoded><![CDATA[<p>On November 17, 2011, 45 mobile phone carriers around the world committed their product roadmap to using NFC technology for mobile payments. As part of this commitment, the operators would have to abide by a new set of design specifications. If these specifications become commonplace, future mobile phones would automatically have the capacity to make mobile payments, without the need for any third-party software or hardware.</p>
<p>As of today, this is an emerging concept. The mobile payments landscape is a somewhat barren and disjointed affair, at least when it comes to a more widespread acceptance. This is due to two factors, public perception and the lack of brand security. Why would consumers risk identity theft with a provider they are not familiar with? While paying for things with your mobile phone sounds cutting-edge, most consumers would rather stick with more traditional methods when it comes to parting with their money as these tried-and-tested methods of payment are deemed safer. </p>
<p>However, if a major brand immersed themselves in mobile payments, the publics perception would change overnight. This is what is currently happening with PayPal. On November 8, 2011, the company announced they would be releasing a new app which would accept NFC payments on a user’s mobile phone. To make the service work, consumers would have to authorise PayPal to communicate directly with their mobile phones. For many this is not a problem since they have already developed a brand trust and awareness with PayPal. </p>
<p>This level of trust will have a knock-on effect to other app developers. Working with PayPal themselves, or providing their own NFC payments services becomes easier when a major brand is openly accepting a new technology. Of course, like anything else in app development, new players in this market would still have to prove themselves as reputable service providers before people will openly use their service for transactions.</p>
<p>For many consumers, however, there is only so much trust they can garner for an app. Whether it’s from PayPal, or another noteworthy company, they might still wonder if the technology is secure enough. The situation changes if the technology was already implemented into the phone. There has already been news that these payment systems will be considered for future iPhone and iPad development. If this comes to pass, consumers are bound to change their perspective for good. </p>
<p>This applies even more so for iPhone development, as iPhones are more likely to be on one’s person than iPads. While both devices are mobile, iPhones would be used more often due to their size and their capacity to make phone calls. With that said, providers might see more success incorporating payment processing into iPhone development over iPad development. If the iPad becomes smaller and/or it gains the ability to make phone calls, this would probably change, as it would become like any other mobile phone. </p>
<p>In any case, once the concept of mobile payments becomes standard, consumers will realize how convenient and ground-breaking the technology really is. Instead of having to pull out a collection of cards and payment methods, consumers can use one device to pay for their goods and services, make Internet payments without needing a computer and save time.</p>
]]></content:encoded>
			<wfw:commentRss>http://locassa.com/index.php/mobile-app-payments-using-nfc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ABC Spy</title>
		<link>http://locassa.com/index.php/abc-spy/</link>
		<comments>http://locassa.com/index.php/abc-spy/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 22:39:34 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[iPhone Apps]]></category>
		<category><![CDATA[Our Work]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[iPhone]]></category>
		<guid isPermaLink="false">http://www.locassa.com/?p=887</guid>
		<description><![CDATA[ABC Spy combines the eternally popular I Spy game with learning the alphabet and spelling simple words in a fantastically fun new game for children aged 4 upwards. ]]></description>
			<content:encoded><![CDATA[<p>We call ABC Spy an activity app because as well as using some of the great features on your iPhone, kids also have to get active &#8211; thinking, discovering and solving problems in the world around them. We’re proud of ABC Spy because we know that while your child is having great fun playing, they’re also getting a powerful, creative learning experience. </p>
<p>ABC Spy combines the eternally popular I Spy game with learning the alphabet and spelling simple words in a fantastically fun new game for children aged 4 upwards. </p>
<p>ABC Spy challenges children to create their own ABC by taking photos of objects in the world around them for each letter of the alphabet. ‘Simon Spider’ helps with handy hints – “Can you think of something nice to eat that begins with A?” &#8211; and if they get stuck they can always choose one of the photos provided in the app. </p>
<p>After choosing a frame, the child uses our easy to use editor to get the photo looking just how they want it. Trophies are awarded for key achievements, and as a parent you get to see key statistics about their progress, including time spent playing. </p>
<p>The most exciting part comes when they&#8217;re ready to share their work – tap the &#8216;Make a film&#8217; button to generate a movie that can be shared with friends and family and even put on YouTube. Just wait till you see the look of pride on their face when their work is online for everyone to see! </p>
]]></content:encoded>
			<wfw:commentRss>http://locassa.com/index.php/abc-spy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interactive Rich Text UILabel</title>
		<link>http://locassa.com/index.php/interactive-rich-text-uilabel/</link>
		<comments>http://locassa.com/index.php/interactive-rich-text-uilabel/#comments</comments>
		<pubDate>Sun, 19 Jun 2011 14:43:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[User Interfaces]]></category>
		<guid isPermaLink="false">http://www.locassa.com/?p=817</guid>
		<description><![CDATA[Overview I see lots of posts asking about the existence of a clickable, rich text UILabel and the answer is often the same&#8230;. it&#8217;s not possible so use a UIWebView&#8230;. NOOOOOOO! The idea of contemplating using such a heavyweight control for a purpose for which is was not designed is a tad crazy. So I [...]]]></description>
			<content:encoded><![CDATA[<div class="tech-warning">NERD ALERT! This is a tech article, the faint of heart should browse on&#8230;</div>
<p></p>
<h3>Overview</h3>
<p>I see lots of posts asking about the existence of a clickable, rich text UILabel and the answer is often the same&#8230;. it&#8217;s not possible so use a UIWebView&#8230;. NOOOOOOO! The idea of contemplating using such a heavyweight control for a purpose for which is was not designed is a tad crazy. So I decided to write a component to solve the issue and make it flexible to boot. Let&#8217;s dive in!</p>
<div class="download">The source code for this article can be downloaded <a href="http://www.locassa.com/wp-content/uploads/2011/06/RichTextLabel.zip">here.</a></div>
<p></p>
<h3>The Basics</h3>
<p>This component consists of two parts, the label and the style. The label is a <strong>relatively</strong> straightforward UILabel descendent and the style object is a simple class holding the relative properties for a certain style, of which we can have any number. So let&#8217;s start with the style.</p>
<p>The style contains the following properties:</p>
<pre class="brush: objc; title: ; notranslate">
  UIFont *font;
  UIColor *color;
  id target;
  SEL action;
</pre>
<p></p>
<p>It contains the font to use, the colour to use and an optional target and action. If these optional parameters are specified then you will be able to tap the text and call the relevant action, otherwise the text will merely be styled.</p>
<p>The second part is the label. This is a bit more complicated, but luckily the full source code is in the link above. The label maintains a list of style objects for a given prefix, so we can style &#8216;#&#8217; elements, &#8216;@&#8221; elements, &#8216;http://&#8217; elements etc. It contains a method to associate a style to a prefix as follows&#8230;.</p>
<pre class="brush: objc; title: ; notranslate">
- (void)addStyle:(LORichTextLabelStyle *)aStyle forPrefix:(NSString *)aPrefix {
  if((aPrefix == nil) || (aPrefix.length == 0)) {
    [NSException raise:NSInternalInconsistencyException format:@&quot;Prefix must be specified in %@&quot;, NSStringFromSelector(_cmd)];
  }
  [highlightStyles setObject:aStyle forKey:aPrefix];
}
</pre>
<p></p>
<p>Nice and simple. There are overridden methods for the setFont, setColour and setText which set the base font and colour and notify the OS that the label needs to be redrawn. The setText method also splits the text into elements which are used in the layout code later on.</p>
<pre class="brush: objc; title: ; notranslate">
- (void)setFont:(UIFont *)value {
  if([font isEqual:value]) {
    return;
  }
  [font release];
  font = value;
  [font retain];
  [self setNeedsDisplay];
}
- (void)setTextColor:(UIColor *)value {
  if([textColor isEqual:value]) {
    return;
  }
  [textColor release];
  textColor = value;
  [textColor retain];
  [self setNeedsLayout];
}
- (void)setText:(NSString *)value {
  [elements release];
  elements = [value componentsSeparatedByString:@&quot; &quot;];
  [elements retain];
  [self setNeedsLayout];
}
</pre>
<p></p>
<h3>Amazing Layout</h3>
<p>The only other method in the label is the layout method, and this is where the magic happens. First we remove all subview as we will be creating them all again in a second. We then iterate our elements and process each one, maintaining a layout position as we go. We look for a style matching the prefix of the current element, or the base style if none is specified. We size the element and render it in position with the specified style. If the element has a target we use a UIButton, if not then a UILabel. The full code is as follows&#8230;</p>
<pre class="brush: objc; title: ; notranslate">
- (void)layoutSubviews {
  [self removeSubviews];
  NSUInteger maxHeight = 999999;
  CGPoint position = CGPointZero;
  CGSize measureSize = CGSizeMake(self.size.width, maxHeight);
  for(NSString *element in elements) {
    LORichTextLabelStyle *style = nil;
    // Find suitable style
    for(NSString *prefix in [highlightStyles allKeys]) {
      if([element hasPrefix:prefix]) {
        style = [highlightStyles objectForKey:prefix];
        break;
      }
    }
    UIFont *styleFont = style.font == nil ? font : style.font;
    UIColor *styleColor = style.color == nil ? textColor : style.color;
    // Get size of content (check current line before starting new one)
    CGSize remainingSize = CGSizeMake(measureSize.width - position.x, maxHeight);
    CGSize singleLineSize = CGSizeMake(remainingSize.width, 0.0);
    CGSize controlSize = [element sizeWithFont:styleFont constrainedToSize:singleLineSize lineBreakMode:UILineBreakModeTailTruncation];
    CGSize elementSize = [element sizeWithFont:styleFont constrainedToSize:remainingSize];
    if(elementSize.height &gt; controlSize.height) {
      position.y += controlSize.height;
      position.x = 0.0;
    }
    elementSize = [element sizeWithFont:styleFont constrainedToSize:measureSize];
    CGRect elementFrame = CGRectMake(position.x, position.y, elementSize.width, elementSize.height);
    // Add button or label depending on whether we have a target
    if(style.target != nil) {
      UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
      [button addTarget:style.target action:style.action forControlEvents:UIControlEventTouchUpInside];
      [button setTitle:element forState:UIControlStateNormal];
      [button setTitleColor:styleColor forState:UIControlStateNormal];
      [button setFrame:elementFrame];
      [button.titleLabel setFont:styleFont];
      [self addSubview:button];
    } else {
      UILabel *label = [[UILabel alloc] initWithFrame:elementFrame];
      [label setBackgroundColor:[UIColor clearColor]];
      [label setNumberOfLines:maxHeight];
      [label setFont:styleFont];
      [label setTextColor:styleColor];
      [label setText:element];
      [self addSubview:label];
    }
    CGSize spaceSize = [@&quot; &quot; sizeWithFont:styleFont];
    position.x += elementSize.width + spaceSize.width;
    if([element isEqual:[elements lastObject]]) {
      position.y += controlSize.height;
    }
  }
  [self setSize:CGSizeMake(self.size.width, position.y)];
}
</pre>
<p></p>
<h3>In Use</h3>
<p>To use the label we need to create some style, add them to the label and set the text accordingly. We can create any number of styles and associate them with specific prefixes. Let&#8217;s look at how we would add styles for a hashtag&#8230;</p>
<pre class="brush: objc; title: ; notranslate">
  // Create a hashtag style
  LORichTextLabelStyle *hashStyle = [LORichTextLabelStyle styleWithFont:[UIFont fontWithName:@&quot;Helvetica-Bold&quot; size:14.0] color:[UIColor magentaColor]];
  [hashStyle addTarget:self action:@selector(hashSelected:)];
  // Create the label with the default font and colour for the specified width
  LORichTextLabel *label = [[LORichTextLabel alloc] initWithWidth:300.0];
  [label setFont:[UIFont fontWithName:@&quot;Helvetica&quot; size:14.0]];
  [label setTextColor:[UIColor blackColor]];
  [label setBackgroundColor:[UIColor clearColor]];
  // Add the style to the label for the '#' prefix
  [label addStyle:hashStyle forPrefix:@&quot;#&quot;];
  // Set the text of the label
  [label setText:@&quot;This is an example of a rich text UILabel class highlighting #hashtags pretty easily!&quot;];
</pre>
<p></p>
<p>This renders the text as per the style and fires the hashSelected: selector when the tag is clicked. But what does that return? Well the tag is a UIButton so it follows the standard signature, and the title of the button is the tag itself!</p>
<pre class="brush: objc; title: ; notranslate">
- (void)hashSelected:(id)sender
  NSString *tag = ((UIButton *)sender).titleLabel.text;
}
</pre>
<p></p>
<p>There you have it. I will leave it to you to look at how to improve this to use the minimum number of UILabel components as it gets a bit more complex but this should be enough to get you started. UIWebviews?! Pah.</p>
]]></content:encoded>
			<wfw:commentRss>http://locassa.com/index.php/interactive-rich-text-uilabel/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Apple App Store Approval Process Explained</title>
		<link>http://locassa.com/index.php/apple-app-store-approval-process-explained/</link>
		<comments>http://locassa.com/index.php/apple-app-store-approval-process-explained/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 08:17:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<guid isPermaLink="false">http://www.locassa.com/?p=726</guid>
		<description><![CDATA[Mobile applications are expanding exponentially, but whilst most app development still seems to be concentrated on iPhone development, the number of companies looking for iPad development is catching up fast. This uptake of new development is in spite of the stringent requirements for acceptance of apps within the Apple App Store. Apple has always had [...]]]></description>
			<content:encoded><![CDATA[<p>Mobile applications are expanding exponentially, but whilst most app development still seems to be concentrated on iPhone development, the number of companies looking for iPad development is catching up fast. This uptake of new development is in spite of the stringent requirements for acceptance of apps within the Apple App Store. Apple has always had strict guidelines for any iOS development of apps in order to protect both the integrity of their devices but also to ensure the Apple platform remains a family orientated environment. It will help increase the chances of App acceptance if you take these guidelines into consideration early in your app development and planning stages.</p>
<h3>Guidelines</h3>
<p>As of June 6, 2011, more than 500,000 apps have been approved for the US App Store, the largest of all regional stores, from a little more than 88,000 publishers. This makes for some fierce competition and <strong>can</strong> result in a lengthy approval process. Apple is very protective of its reputation as a reliable and family oriented company afterall. To help implement a smoother application process, they have recently published <a href="http://developer.apple.com/appstore/resources/approval/guidelines.html">App Store Review Guidelines for iOS apps</a>. This document lists the requirements for the look and feel of the user interface, technological and functional operations, and acceptable categories. A thorough examination of the guidelines can help prevent wasted time in development for a project that Apple will refuse immediately.</p>
<h3>Apple Developer Account</h3>
<p>Once you have ensured that the feature-set will pass Apple’s review board, the next step in the process is to register as an Apple developer. The current cost of this is £59 ($99) and is required for each company wishing to submit apps to the App Store; this fee must be renewed annually. Included in the application fee is access to the many features of the iOS Dev Center where you will find videos, forums, documentation and even samples of code. This also gives you an iOS Simulator so that you can run iPhone and iPad applications locally on your Mac desktop machine for testing and debugging purposes. Joining this developer program also gives you the ability to test your applications on the devices themselves, a crucial step in the app development process. Whilst the simulator is good for a quick development / testing cycle, there is no substitute for on-device testing throughout the development process.</p>
<h3>App Store Submission</h3>
<p>When your application is fully tested and ready for publication, you will upload it to the App Store and submit it to the approval process. During the submission, you will also need to set its category, keywords, and the price band. The approval process can take anywhere from a few days to a couple of months. As of April of 2011, the average approval time was about a week, however the variable nature of this process needs to be accounted for in your expectations of app delivery times. </p>
<p>If your app is fully tested and meets Apple’s family oriented standards, approval should be simple. If, however, approval is denied, they will notify you of the problems by email and you will need to make necessary fixes and resubmit. Patience is required in most cases. With an average of more than 600 submissions per day during May of 2011, the reviewers are busy and new or upgraded devices can result in an avalanche of new apps all at once, slowing the process even more.</p>
<h3>Pricing Your App</h3>
<p>You will be required to use one of Apple’s listed price bands. There are currently 85 bands ranging from “free” to £599 ($999). Apple takes 30% of the selling price and pays you the balance through direct deposit once per month. You can increase your income if you enable Apple’s iAD network in your free apps. Apple sells and serves the ads and pays you up to 60% of the advertising revenue from your apps. Apple also allows “in-app purchases” which means you can offer a free app with additional features for sale to the customer after download.</p>
<h3>App Store Updates</h3>
<p>If you decide at some future date to update your app with extensive new features or to meet the requirements of new equipment, you will be required to submit the app for approval again. Apple is very particular about the merchandise offered for sale in their App Store. That is one reason their apps are so popular. If your app offers a real value to users and demonstrates technical excellence along with a creative and cool functionality, you may have a chance of having the iTunes editorial teams choose to highlight it and you could soon be an Apple App Store success story.</p>
]]></content:encoded>
			<wfw:commentRss>http://locassa.com/index.php/apple-app-store-approval-process-explained/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Why Cheap Software Development Costs More</title>
		<link>http://locassa.com/index.php/why-cheap-software-development-costs-more/</link>
		<comments>http://locassa.com/index.php/why-cheap-software-development-costs-more/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 11:42:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">http://www.locassa.com/?p=585</guid>
		<description><![CDATA[It is a natural situation that companies want to save money, reducing costs maximises profits after all, and when it comes to sourcing software development services, this is no exception. The iPhone and iPad development market is awash with budding developers, small agencies as well as more established software houses and do-it-all companies. Why is [...]]]></description>
			<content:encoded><![CDATA[<p>It is a natural situation that companies want to save money, reducing costs maximises profits after all, and when it comes to sourcing software development services, this is no exception. The iPhone and iPad development market is awash with budding developers, small agencies as well as more established software houses and do-it-all companies. Why is it that the iOS development market contains such extremes of people? There are two simple answers to this which explain each end of the scale&#8230;</p>
<ol>
<li><strong>Cost.</strong> Apple has made it incredibly easy and cheap for anyone to get into development on the iOS platform. The tools are pretty much free even if the cost of entry, a Mac, can be somewhat more. Yet compared to a decent .NET environment with Visual Studio, Resharper and the like, it is still one of the cheapest development platforms around.</li>
<li><strong>Revenue.</strong> Apple has made the iOS market <strong>so</strong> appealing that every man and his dog wants an iPhone or iPad app, and some want several! This has made the development market surrounding iPhones and iPads a <strong>very</strong> lucrative one.</li>
</ol>
<h3>False Economy</h3>
<p>Many companies when looking to source development partners will evaluate the market, as they should, and will make their choice based on a number of factors. Cost is obviously a key factor here but it can also be the cause of increased costs further down the development process. We know the market, and whilst we are much better value than the majority of the larger agencies around, some companies simply decide to go with the cheapest option available to them. This usually means either off-shore development or a sole &#8216;bedroom&#8217; developer who has picked up iOS development due to the low cost of entry, and this more often than not, has a less than favourable outcome for the company concerned. Here&#8217;s why&#8230;</p>
<h3>Off-shore Development</h3>
<p>Whilst off-shore development services are undeniably cheap, the process of working with such companies can be more time-consuming and stressful than you would first imagine. Given the time difference when working with such companies, managing the development process and flow of information in both directions can prove incredibly difficult, requiring increasing amounts of your time to keep the project on track. The inability to have a face-to-face meeting with the development team and discuss you ideas in person, is something that is often overlooked, yet is most likely <strong>the</strong> most important factor when working with any team. The language differences can also be an issue, often resulting in misunderstood requirements or cultural differences manifesting themselves in incorrect design approaches for your target market.</p>
<p>The end quality of these off-shore development factories is also generally well below par due to the low-cost / high-turnover approach used to make a sustainable business. The end result? Companies who initially chose this route return to us to help sort out the mess, which invariably means starting again due to the poor quality, unmanageable code-base.</p>
<h3>The Bedroom Developer</h3>
<p>We appreciate that everyone has to start somewhere and we are pleased that more and more aspiring developers are choosing the Apple iOS platform as their platform of choice but there are inherent issues that arise from working with developers of this type. Most are self-taught and lack the broader development experience that comes from a more traditional development background. Dealing with iPhone and iPad apps doesn&#8217;t simply end with those devices, often you will need experience of data architecture, client-server interaction, encryption&#8230;the list goes on. Sadly this kind of experience can not, and <strong>is</strong> not, easily gained from reading books and blog posts on a part-time basis.</p>
<p>As with off-shore development, the quality of work produced by these kinds of developers is often below par and of such a single-developer focused approach, that extending it in the future is next to impossible. Again starting the project again is often the most cost effective solution, as crazy as that may seem.</p>
<h3>Final Thoughts</h3>
<p>When working on a new project it is inevitable that you would wish to keep development costs down but try to measure the true cost of taking a route that may end up costing you more in the long run. Development standards vary greatly, so make sure you allocate your development budget carefully according to your needs, your expectations and you ultimate goal.</p>
]]></content:encoded>
			<wfw:commentRss>http://locassa.com/index.php/why-cheap-software-development-costs-more/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Marketing iPhone And iPad Apps</title>
		<link>http://locassa.com/index.php/marketing-iphone-and-ipad-apps/</link>
		<comments>http://locassa.com/index.php/marketing-iphone-and-ipad-apps/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 09:56:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[App Store]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Social Networking]]></category>
		<guid isPermaLink="false">http://www.locassa.com/?p=691</guid>
		<description><![CDATA[iPhone and iPad Apps aren’t going to market themselves. No matter how brilliant, how innovative or how plainly time-saving and cost-effective an app might be, it always requires some form of marketing. Luckily, not all marketing costs money, especially on the internet. Learning how to harness virtual word of mouth can go a long way [...]]]></description>
			<content:encoded><![CDATA[<p>iPhone and iPad Apps aren’t going to market themselves. No matter how brilliant, how innovative or how plainly time-saving and cost-effective an app might be, it always requires some form of marketing. Luckily, not all marketing costs money, especially on the internet. Learning how to harness virtual word of mouth can go a long way toward alerting consumers about the existence of a particular App. </p>
<h3>The Apple App Store</h3>
<p>The Apple App Store is <strong>the</strong> marketplace for iPhone and iPad Apps, therefore, all marketing efforts must lead to it. Whether a company chooses to use a paid method or marketing or a free viral based campaign, they must always remember to include a link to the specific location of the App in the store. Without this link, considerable amounts of potential revenue can be lost.</p>
<p>Making an App stand out in the App Store requires popularity and a particularly informative yet catchy tag line. The App is competing against a slew of world-class technologies; making it stand out is a matter not only of understanding the target audience, but writing copy that makes that App particularly appealing. The description of the App shouldn’t attempt to be clever, but rather should emphasize brevity and precision. Frequently, descriptions that are short yet punchy attract the most attention, whereas long-winded word play tends to lose potential customers.</p>
<h3>Paid Marketing</h3>
<p>For those who prefer to take no chances, paying a marketing firm is a good idea, yet it is important to choose a firm with a mobile marketing bias as the rules for marketing apps in this area are somewhat different to traditional routes. A marketing firm can help an App find its audience through an aggressive campaign on a social network such as Facebook or Twitter. By getting people to “like” the iPhone App, marketers can often persuade these individuals to purchase a copy, either by giving them a free trial period or producing a steady stream of intriguing content that compels them to buy the App. Marketing firms can also pay for legitimate advertising space, such as advertising boards on trains and busses or magazine pages. Although this can be a significant financial investment, the App will attract a much larger audience through large-scale paid advertising. Those individuals or companies who are creating an App that is a direct extension of their business should consider having some form of paid advertising.</p>
<p>There’s also in-app advertising, which allows App creators to place ads within another App. It’s innovative and highly targeted; if someone already is using an iPad App or iPhone App, they’re going to be more likely to buy another App especially when the ads are targeted at a likeminded audience.</p>
<h3>Free Marketing</h3>
<p>However, there are a number of ways to generate free press, too. The most direct method is to write articles or blogs about the App on a free blogging site and then link these entries to your website or App Store download page. This helps build up information on the App. When people perform a search for the App on a search engine, they’ll see a significant amount of information and content. This helps bolster the App’s popularity and ranking, and also can generate commentary by actual users. Providing some kind of free demonstration of the App’s functionality is vital. Positive user feedback can sometimes be the difference between a successful campaign and a total strike-out. If people genuinely respond to an App, they’ll be sure to tell their friends, which will result in even more interest and potential sales.</p>
<p>Finally, creating a free page for the App on a prominent social networking site is important: it serves as a reference point and as a way of generating new content and interactivity with a potential client base. If someone hears about the App, they will probably want to research it before buying and that’s just good marketing.</p>
<p>Check out the following links for more information&#8230;.</p>
<p>Apple&#8217;s iAd platform &#8211; <a href="http://advertising.apple.com/brands/">Link</a><br />
Admob platform &#8211; <a href="http://www.admob.com/">Link</a><br />
Submit Free press releases &#8211; <a href="http://www.prlog.org/pub/">Link<a></p>
]]></content:encoded>
			<wfw:commentRss>http://locassa.com/index.php/marketing-iphone-and-ipad-apps/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Objective-C Categories Explained</title>
		<link>http://locassa.com/index.php/how-categories-can-simplify-your-code/</link>
		<comments>http://locassa.com/index.php/how-categories-can-simplify-your-code/#comments</comments>
		<pubDate>Wed, 25 May 2011 19:40:55 +0000</pubDate>
		<dc:creator>james</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<guid isPermaLink="false">http://www.locassa.com/?p=628</guid>
		<description><![CDATA[<img src="http://www.locassa.com/wp-content/uploads/2011/05/Code.png" alt="Objective-c Categories Explained" class="alignright" width="710" height="170">
Good developers know how to save time, this generally means no copy-and-paste, no duplicate code and a good class structure to keep common items grouped together in an efficient class hierarchy. One way to add functionality to an existing class is to subclass it. We create a new descendent of our class, add the required functionality and use the new class in place of the old one. ]]></description>
			<content:encoded><![CDATA[<div class="tech-warning">NERD ALERT! This is a tech article, the faint of heart should browse on&#8230;</div>
<p></p>
<h3>Overview</h3>
<p>Good developers know how to save time, this generally means no copy-and-paste, no duplicate code and a good class structure to keep common items grouped together in an efficient class hierarchy. One way to add functionality to an existing class is to subclass it. We create a new descendent of our class, add the required functionality and use the new class in place of the old one. </p>
<p>This approach of subclassing is common to all object-orientated language and is one of the key features that enable developers to extend and enhance existing code. Objective-c however, has another way to extend existing classes, a powerful system called Categories. Whilst we can add more classes to our hierarchy to enhance functionality, more classes lead to more complexity, which will make our code more difficult to manage.</p>
<p> By using categories, we can alter the very definition of the existing objects we work with every day. What&#8217;s more, any object that is derived from a categorised object will include the new logic we have implemented. Powerful indeed.</p>
<div class="download">
The source code for this article can be downloaded <a href="http://www.locassa.com/wp-content/uploads/2011/05/Categories.zip">here.</a>
</div>
<p></p>
<h3>My First Category!</h3>
<p>Let&#8217;s start with the format of a category. At first glance a category definition looks very similar to a normal class definition. We first define an interface for the object we want to categorise.</p>
<pre class="brush: objc; title: ; notranslate">
@interface MyClass (CategoryName)
//Add method signatures here
@end
</pre>
<p></p>
<p>Notice the parentheses after the class name, these group the following methods under a particular name. It is good practice to state in the parenthesis the purpose of the category. After a while we may build up a large collection of tailored categories, so good naming is essential. A fairly standard naming convention for the header file containing the interface would be: &#8220;ClassName+CategoryName.h&#8221;, for instance if we were extending the NSString class with formatting utility methods we may have the following&#8230;</p>
<pre class="brush: objc; title: NSString+FormattingUtils.h; notranslate">
#import &lt;Foundation/Foundation.h&gt;
@interface NSString (FormattingUtils)
// Add method signatures here
@end
</pre>
<p></p>
<p>Similarly to a normal class, the implementation of this class would look like this&#8230;</p>
<pre class="brush: objc; title: NSString+FormattingUtils.m; notranslate">
@implementation NSString (FormattingUtils)
// Add method implementations here
@end
</pre>
<p></p>
<p>Let&#8217;s try a more concrete example. I have an NSString, and I want to know if it contains the string &#8220;Locassa&#8221;. I could write a code to check the value of a string against this search term, but what if I make the call a lot? I could put the method in a base class, but then I am forcing my class hierarchy based on a single method. Instead we can add a category to the NSString class as follows&#8230;</p>
<pre class="brush: objc; title: NSString+Contains.h; notranslate">
#import &lt;Foundation/Foundation.h&gt;
@interface NSString (Contains)
- (BOOL) containsLocassa;
@end
</pre>
<p></p>
<p>Implementing the interface we get:</p>
<pre class="brush: objc; title: NSString+Contains.m; notranslate">
#import &quot;NSString+Contains.h&quot;
@implementation NSString (Contains)
- (BOOL) containsLocassa {
	return !([self rangeOfString:@&quot;Locassa&quot;].location == NSNotFound);
}
@end
</pre>
<p></p>
<p>Easy enough. To make use of this we simply import the header file into wherever we need to use it, and call as if it were a method on any other NSString object.</p>
<pre class="brush: objc; title: ; notranslate">
#import &quot;NSString+Contains.h&quot;
......
NSString *someString = [[NSString alloc] initWithString:@&quot;Locassa is awesome&quot;];
if([someString containsLocassa]) {
	NSLog(@&quot;The string contains 'Locassa'&quot;);
}
[someString release];
</pre>
<p></p>
<p>As you can see we don&#8217;t need to do anything with our existing NSString objects, simply include the header file and the method can be called on existing variables. This makes adding functionality to an existing system <strong>really</strong> easy.</p>
<p>Categories are not limited to extending classes. We can also override existing methods within a class. If I need some custom logic that a UIView doesn&#8217;t provide, I can override the method required while still having access to the original declaration. Pretty powerful huh!</p>
<h3>With great power&#8230;.</h3>
<p>It all seems so simple, and it is! There are however some things worth considering.</p>
<ul>
<li><strong>Naming conflicts</strong>:  If we have several categories imported, both overriding or defining the same method, it can lead to confusing results, this is where a solid naming convention is important.</li>
<li><strong>Overriding existing behaviour</strong>: Overriding a method in a category does give certain advantages, but remember, it affects all objects of the categorised type. If you are overriding a method from a derived class, you still have access to the &#8220;super&#8221; implementation, however, overriding a method declared only in the class we are categorising causes us to lose the original implementation</li>
<li><strong>New methods are added to the categorised object</strong>: When using a framework, we may see that it does not do all the things we want it to do, so we may decide to use categories to extend it. Should we update to a later version of the framework, and the object is given a new method with the same signature, it is our method that is used.</li>
<li><strong>Categories are not a catch all solution</strong>: Though extremely useful, a category is not always required. Knowing when to use them and when not to is very important. Adding extension methods that contain business logic rather than subclassing is not a great idea.</li>
</ul>
<h3>What Categories CAN and CANNOT do</h3>
<p>A category <strong>can</strong> provide a great way to introduce convenience methods. They <strong>can</strong> also be used to divide a particularly complex class into separate implementations, each dealing with a different aspect of the class.</p>
<p>Categories <strong>cannot</strong> introduce new instance variables, this requires a subclass. Also, multiple categories <strong>cannot</strong> have the same name.</p>
<h3>Final Words</h3>
<p>Remember, categories are not a replacement for subclassing, they are merely there to allow you to extend existing objects when you only need simple functionality added. They can help when the overhead of creating a subclass and replacing all instances of the original class is not worth the added value that subclassing can provide.</p>
<p>We have added our most commonly used categories to this post. Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://locassa.com/index.php/how-categories-can-simplify-your-code/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Keeping Things Simple: The Dynamic Box Model</title>
		<link>http://locassa.com/index.php/keeping-things-simple-the-dynamic-box-model/</link>
		<comments>http://locassa.com/index.php/keeping-things-simple-the-dynamic-box-model/#comments</comments>
		<pubDate>Tue, 24 May 2011 21:15:53 +0000</pubDate>
		<dc:creator>james</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[User Interfaces]]></category>
		<guid isPermaLink="false">http://www.locassa.com/?p=520</guid>
		<description><![CDATA[<img src="http://www.locassa.com/wp-content/uploads/2011/05/Code.png" alt="Animate UITableView Cell height Change" class="alignright" width="710" height="170">
As developers, solving problems is what we do, but often the approach is just as important as the solution. Today, we are going to run trough an example of how a relatively complex problem can be solved by ‘thinking simple’, giving you a self-working, generic solution.]]></description>
			<content:encoded><![CDATA[<div class="tech-warning">NERD ALERT! This is a tech article, the faint of heart should browse on&#8230;</div>
<p></p>
<h3>Overview</h3>
<p>As developers, solving problems is what we do, but often the approach is just as important as the solution. Today, we are going to run trough an example of how a relatively complex problem can be solved by &#8216;thinking simple&#8217;, giving you a self-working, generic solution.</p>
<div class="download">
The source code for this article can be downloaded <a href="http://www.locassa.com/wp-content/uploads/2011/05/BoxShuffle.zip">here.</a>
</div>
<p></p>
<h3>The problem</h3>
<p>Whilst working on a project for a large UK newspaper, I noticed one of the developers there had spent several long hours trying to reproduce the icon layout provided by the iPhone and iPad, specifically the reordering of items. Upon showing me the code, he proceeded to run through a large amount of convoluted code, nested IF statements and specific logic to handle single item dragging as well as dual item dragging. He still hadn&#8217;t finished it and it didn&#8217;t work too well. I made the bold statement that I could start from scratch and in 30 minutes would have a simple, generic solution that worked with any number of fingers you could physically fit on the screen. This is the result.</p>
<h3>Building Blocks</h3>
<p>First things first, we need some things to move around, normally these would be icons or photos etc, but for the purposes of keeping things generic, we&#8217;ll call them boxes. We start by modeling our box, a UIView descendent, which needs to know when it is being touched, dragged and dropped. To handle this we override the following methods in UIView&#8230;</p>
<pre class="brush: objc; title: ; notranslate">
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
</pre>
<p></p>
<p>For the touches began and the touches moved we simply want to make our box follow the users touch so they can drag it around. As we are using the same update from both methods we create an update method as follows&#8230;</p>
<pre class="brush: objc; title: ; notranslate">
- (void) updatePosition:(NSSet *)touches {
	CGPoint position = [[touches anyObject] locationInView:self.superview];
	CGRect frame = [self frame];
	frame.origin = position;
	[self setFrame:frame];
	[self.superview bringSubviewToFront:self];
	[delegate box:self movedToPosition:position];
}
</pre>
<p></p>
<p>This simply finds the touch position in the boxes superview and moves the box to that position. It then brings the box to the front (so we can drag boxes over the top of static ones) and tells it&#8217;s delegate that it has moved to a new position in the view. </p>
<div class="blog-info">
If you are unfamiliar with delegates and how they are used, check out the Apple documentation <a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/TP40002974-CH7-SW18">here</a>
</div>
<p></p>
<p>Whilst we are in the box class, the only other method we need is a method to determine if a box being dragged is within our box. We do this by simply having a method which takes a CGPoint and returns TRUE if the point is within the box and FALSE if it is outside it.</p>
<pre class="brush: objc; title: ; notranslate">
- (BOOL) containsPoint:(CGPoint)point {
	return CGRectContainsPoint([self frame], point);
}
</pre>
<p></p>
<h3>Let&#8217;s start building!</h3>
<p>In our view controller, we need to achieve the following things:</p>
<ol>
<li>Layout our boxes in a grid pattern within our view</li>
<li>Respond when the boxes are dragged and re-arrange the remaining boxes accordingly</li>
<li>When a box is released, ensure it takes its new position and arrange the other boxes around it</li>
</ol>
<p>The first point is easy enough to achieve, right?  But first of all we need some boxes to layout! In our controller we maintain an NSMutableArray, and this is where the self-working nature comes into play as we&#8217;ll discuss later, but for now in the viewDidLoad method we fill this array&#8230;</p>
<pre class="brush: objc; title: ; notranslate">
for(int i = 0; i &lt; kBoxCount; i++) {
	LOBox *box = [[LOBox alloc] initWithFrame:CGRectMake(0, 0, kBoxDimension, kBoxDimension)];
	[box setBackgroundColor:[self randomColor]];
	[self.view addSubview:box];
	[box setDelegate:self];
	[boxes addObject:box];
	[box release];
}
</pre>
<p></p>
<p>We have compiler defines (to keep things clear and configurable from one place&#8230;) which define the number of boxes to use as well as the dimension of the box; these are true square boxes so we only need one dimension!</p>
<p>Now we have an array of boxes, we need to lay them out. We have a layout method specifically for this, as we need to call it during the viewDidLoad and also when boxes are moved. We provide a row count to determine how many boxes to fit on a row, but you could always work this out based on the screen width and the box width (plus spacing&#8230;)</p>
<pre class="brush: objc; title: ; notranslate">
- (void) layoutBoxesWithRowCount:(NSInteger)rowCount {
	double xPos = kBoxSpacer;
	double yPos = kBoxSpacer;
	int boxCount = 0;
	for(LOBox *box in boxes) {
		CGRect frame = [box frame];
		frame.origin.x = xPos;
		frame.origin.y = yPos;
		[box setFrame:frame];
		xPos += kBoxDimension + kBoxSpacer;
		boxCount++;
		if(boxCount == rowCount) {
			boxCount = 0;
			xPos = kBoxSpacer;
			yPos += kBoxDimension + kBoxSpacer;
		}
	}
}
</pre>
<p></p>
<p>What&#8217;s so good about this approach you ask?</p>
<p>Notice the heavy use of compiler defines and nicely named variables? This helps keep our code readable and manageable. Magic numbers (hardcoded values in the code with no discernible meaning or definition) will simply lead to confusion. Using numbers instead of these defines means that if we return to the code 6 months down the line we may have no idea where this 2 or that 5 comes from.</p>
<p>Don&#8217;t forget, the boxes are all in an array, with no knowledge of how they are laid out. As far as the box in concerned, it doesn&#8217;t care where it is, the controller will lay out all of the items in the array as appropriate. This will become more important later on when we start moving the boxes around. Which brings us onto&#8230;..</p>
<h3>Dragging a box around</h3>
<p>So we now have a screen full of lovely boxes. But it&#8217;s all very static and boring! The next task is to make it interactive. To achieve this we need to be able to do a few things first. First we need to know when a box is being touched and secondly respond to the movement of a box as it is being dragged. Remember the delegate we had on the box itself, the one that it notified when it is moving, well that delegate is our controller. As the box is moved, our controller will be notified that the box has moved and to which CGPoint it has move to. So the first one is done.</p>
<p>By utilising this delegate approach the controller doesn&#8217;t need to keep track of the boxes and multiple touches. It can sit back and wait for a box to say &#8220;I&#8217;m moving!&#8221; and then perform the layout accordingly. If we were to try and track all of these touches and movements in the controller, it would lead to a mess of nested conditional statements, making the code extremely difficult to read.</p>
<h3>Dynamic Layout</h3>
<p>This is where the self-working and generic code is; the dynamic layout of boxes. This is the implementation of our box delegate method and gets called by each box that is moving. Take a look and i&#8217;ll explain what it does&#8230;</p>
<pre class="brush: objc; title: ; notranslate">
- (void)box:(LOBox *)aBox movedToPosition:(CGPoint)position {
	NSInteger destinationBoxIndex = -1;
	for(LOBox *box in boxes) {
		if([box isEqual:aBox]) {
			continue;
		}
		if([box containsPoint:position]) {
			destinationBoxIndex = [boxes indexOfObject:box];
			break;
		}
	}
	if(destinationBoxIndex == -1) {
		return;
	}
	[boxes removeObject:aBox];
	[boxes insertObject:aBox atIndex:destinationBoxIndex];
	[self animateBoxLayout];
}
</pre>
<p></p>
<p>First we set a sentinel value for the destination box index. This will act as a marker in case we don&#8217;t find any boxes we are moving over. We then iterate our boxes to check if our current box is over it, but first we must check that the box we are checking against isn&#8217;t the box that is moving, that would just be silly. We check if the current box position is within each of the boxes, if we find one that returns TRUE, we set the destinationBoxIndex to be the index of the box that it is overlapping.</p>
<p>Now the two lines of self-working magic&#8230;. we simply remove our box being move from it&#8217;s <strong>current</strong> position and insert into into the same index as the box we are overlapping. This has two effects. The first is that when we remove the box, due to the boxes being in an array, the rest of the boxes to the right of our box shuffle down a spot to takes its position. The second is that when we insert the box in its new position, all of the boxes to the right of it shuffle up a spot to accomodate it. Exactly what we want. Then all we need to do is layout the boxes again (using our previous layout method) and the boxes all shuffle into their correct positions, wrapping this in a UIView animation block causes a nice animation to occur.</p>
<p>So there we have it. We have a simple, reusable component that can be slotted into any view, with boxes that can be laid out as they move. You can use this for images, icons, anything really. In fact we used this for MusixCube, so if you want to see where you can take this then check out the link below.</p>
<p><a href="http://www.locassa.com/index.php/2011/05/musixcube/"><img src="http://www.locassa.com/wp-content/uploads/2011/05/MusicCube_Article.png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://locassa.com/index.php/keeping-things-simple-the-dynamic-box-model/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The &#8216;Home Screen&#8217;: A Mobile Phones Real Estate</title>
		<link>http://locassa.com/index.php/the-home-screen-a-mobile-phones-real-estate/</link>
		<comments>http://locassa.com/index.php/the-home-screen-a-mobile-phones-real-estate/#comments</comments>
		<pubDate>Tue, 24 May 2011 12:57:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Lifestyle]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[User Interfaces]]></category>
		<guid isPermaLink="false">http://www.locassa.com/?p=524</guid>
		<description><![CDATA[With the increase in sales figures for the iPhone and iPad, as well as other platforms such as Android, it is clear that the mobile ecosystem is a valuable and profitable environment for businesses to target with their products and services. With each generation of device comes a wave of new adopters, sat atop a [...]]]></description>
			<content:encoded><![CDATA[<p>With the increase in sales figures for the iPhone and iPad, as well as other platforms such as Android, it is clear that the mobile ecosystem is a valuable and profitable environment for businesses to target with their products and services. With each generation of device comes a wave of new adopters, sat atop a percentage of repeat buyers, and it is this captive audience which makes mobile advertising a multi billion dollar dollar industry and an attractive prospect for new business.</p>
<p>With so many companies vying for advertising space, the cost of promoting your products and services to the mobile user base is becoming more expensive and prohibitive every day. It&#8217;s a wonder then that so many companies overlook <strong>the</strong> most valuable advertising space available on mobile devices; the users Home Screen.</p>
<h3>Valuing Value</h3>
<p>So why is this space valuable? Especially compared to in-app advertising? Well it&#8217;s quite simple, users will see this space each day, more than any other part of their phone. Every time they go to make a call, every time they go to check their calendar and every time the launch an app, they all go via the home screen. Having your company logo on this screen is valuable to repeated brand awareness, and when you icon is clicked instinctively, as is the case with apps such as Facebook and Twitter, then the brand reinforcement is complete, it becomes natural.</p>
<h3>Icons, Icons, Icons</h3>
<p>Now obviously to get your brand onto someones device you need an app, in fact you may even need several but the importance of this space should not be overlooked. Whether it is a  simple app which is fun to use or a fully-featured solution offering a tie-in with your products and services, it makes little difference. The end result is that your logo, your icon, your brand is shown to users every day and on a frequent basis.</p>
<h3>Getting Your Logo There</h3>
<p>So now we know the value of this space, how do we actually stick something there? Well obviously you need an app, but you need one that is engaging and has lasting appear. The app turnover on homescreens is fast, however the first page can be seen as the holy grail, much like the first page of Google search results. This is the page where must-keep apps remain and your brand will continue to promote itself long after you have released it.</p>
<p>Look for an idea which ties in with your business, or sponsor an app which is completely unrelated but of great use to the user or great fun to play with. Ideas spread, and if you create a great app that resides on a single homescreen, chances are it will start to appear on more and more and that is real estate you can&#8217;t afford to miss.</p>
]]></content:encoded>
			<wfw:commentRss>http://locassa.com/index.php/the-home-screen-a-mobile-phones-real-estate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

