SlideShare a Scribd company logo

I phone勉強会 (2011.11.23)

UI & performance tips.

1 of 52
Download to read offline
iPhone SDK




http://kishikawakatsumi.com

Twitter
@k_katsumi

24/7 twenty-four seven
http://d.hatena.ne.jp/KishikawaKatsumi/
iPhone SDK




http://kishikawakatsumi.com

Twitter
@k_katsumi

24/7 twenty-four seven
http://d.hatena.ne.jp/KishikawaKatsumi/
iPhone SDK


•     touch   •      on the WEB

•LDR touch    •
•             •i-Radio
•LCD Clock    •
•Subway Map   •
•MyWebClip
•             •
iPhone SDK

http://github.com/kishikawakatsumi

•hatena-touch     •DescriptionBuilder
•ldr-touch        •TiledLayerView
•tv-listings      •UICCalendarPicker
•MapKit-Route-Directions
•FlipCardNavigationView
•PhotoFlipCardView
iPhone SDK

http://github.com/kishikawakatsumi

•UICKeyChainStore
•TiKeyChainStore
•CropImageSample
iPhone SDK

Recommended

More Related Content

What's hot

Adopting 3D Touch in your apps
Adopting 3D Touch in your appsAdopting 3D Touch in your apps
Adopting 3D Touch in your appsJuan C Catalan
 
Your Second iPhone App - Code Listings
Your Second iPhone App - Code ListingsYour Second iPhone App - Code Listings
Your Second iPhone App - Code ListingsVu Tran Lam
 
GHC Participant Training
GHC Participant TrainingGHC Participant Training
GHC Participant TrainingAidIQ
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best PracticesYekmer Simsek
 
Advancing the UI — Part 1: Look, Motion, and Gestures
Advancing the UI — Part 1: Look, Motion, and GesturesAdvancing the UI — Part 1: Look, Motion, and Gestures
Advancing the UI — Part 1: Look, Motion, and GesturesSamsung Developers
 
Core Animation
Core AnimationCore Animation
Core Animationbdudney
 
20180721 code defragment
20180721 code defragment20180721 code defragment
20180721 code defragmentChiwon Song
 
The Ring programming language version 1.2 book - Part 35 of 84
The Ring programming language version 1.2 book - Part 35 of 84The Ring programming language version 1.2 book - Part 35 of 84
The Ring programming language version 1.2 book - Part 35 of 84Mahmoud Samir Fayed
 
Matching Game In Java
Matching Game In JavaMatching Game In Java
Matching Game In Javacmkandemir
 
Intro programacion funcional
Intro programacion funcionalIntro programacion funcional
Intro programacion funcionalNSCoder Mexico
 
303 TANSTAAFL: Using Open Source iPhone UI Code
303 TANSTAAFL: Using Open Source iPhone UI Code303 TANSTAAFL: Using Open Source iPhone UI Code
303 TANSTAAFL: Using Open Source iPhone UI Codejonmarimba
 
Slightly Advanced Android Wear ;)
Slightly Advanced Android Wear ;)Slightly Advanced Android Wear ;)
Slightly Advanced Android Wear ;)Alfredo Morresi
 
20181020 advanced higher-order function
20181020 advanced higher-order function20181020 advanced higher-order function
20181020 advanced higher-order functionChiwon Song
 
Android Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation DrawerAndroid Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation DrawerAgus Haryanto
 
Developing for Plone using ArchGenXML / ArgoUML
Developing for Plone using ArchGenXML / ArgoUMLDeveloping for Plone using ArchGenXML / ArgoUML
Developing for Plone using ArchGenXML / ArgoUMLJazkarta, Inc.
 
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰Jung Kim
 
Intro to computer vision in .net update
Intro to computer vision in .net   updateIntro to computer vision in .net   update
Intro to computer vision in .net updateStephen Lorello
 

What's hot (20)

Adopting 3D Touch in your apps
Adopting 3D Touch in your appsAdopting 3D Touch in your apps
Adopting 3D Touch in your apps
 
Your Second iPhone App - Code Listings
Your Second iPhone App - Code ListingsYour Second iPhone App - Code Listings
Your Second iPhone App - Code Listings
 
GHC Participant Training
GHC Participant TrainingGHC Participant Training
GHC Participant Training
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
 
Advancing the UI — Part 1: Look, Motion, and Gestures
Advancing the UI — Part 1: Look, Motion, and GesturesAdvancing the UI — Part 1: Look, Motion, and Gestures
Advancing the UI — Part 1: Look, Motion, and Gestures
 
Core Animation
Core AnimationCore Animation
Core Animation
 
20180721 code defragment
20180721 code defragment20180721 code defragment
20180721 code defragment
 
The Ring programming language version 1.2 book - Part 35 of 84
The Ring programming language version 1.2 book - Part 35 of 84The Ring programming language version 1.2 book - Part 35 of 84
The Ring programming language version 1.2 book - Part 35 of 84
 
Matching Game In Java
Matching Game In JavaMatching Game In Java
Matching Game In Java
 
@Ionic native/google-maps
@Ionic native/google-maps@Ionic native/google-maps
@Ionic native/google-maps
 
I os 04
I os 04I os 04
I os 04
 
Intro programacion funcional
Intro programacion funcionalIntro programacion funcional
Intro programacion funcional
 
303 TANSTAAFL: Using Open Source iPhone UI Code
303 TANSTAAFL: Using Open Source iPhone UI Code303 TANSTAAFL: Using Open Source iPhone UI Code
303 TANSTAAFL: Using Open Source iPhone UI Code
 
Slightly Advanced Android Wear ;)
Slightly Advanced Android Wear ;)Slightly Advanced Android Wear ;)
Slightly Advanced Android Wear ;)
 
20181020 advanced higher-order function
20181020 advanced higher-order function20181020 advanced higher-order function
20181020 advanced higher-order function
 
Android Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation DrawerAndroid Sliding Menu dengan Navigation Drawer
Android Sliding Menu dengan Navigation Drawer
 
iOS Training Session-3
iOS Training Session-3iOS Training Session-3
iOS Training Session-3
 
Developing for Plone using ArchGenXML / ArgoUML
Developing for Plone using ArchGenXML / ArgoUMLDeveloping for Plone using ArchGenXML / ArgoUML
Developing for Plone using ArchGenXML / ArgoUML
 
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
 
Intro to computer vision in .net update
Intro to computer vision in .net   updateIntro to computer vision in .net   update
Intro to computer vision in .net update
 

Similar to I phone勉強会 (2011.11.23)

Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4Saulo Arruda
 
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаКурсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаГлеб Тарасов
 
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)anistar sung
 
Webエンジニアから見たiOS5
Webエンジニアから見たiOS5Webエンジニアから見たiOS5
Webエンジニアから見たiOS5Satoshi Asano
 
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)Sarp Erdag
 
Leaving Interface Builder Behind
Leaving Interface Builder BehindLeaving Interface Builder Behind
Leaving Interface Builder BehindJohn Wilker
 
UIViewControllerのコーナーケース
UIViewControllerのコーナーケースUIViewControllerのコーナーケース
UIViewControllerのコーナーケースKatsumi Kishikawa
 
Cocoa Heads Tricity - Design Patterns
Cocoa Heads Tricity - Design PatternsCocoa Heads Tricity - Design Patterns
Cocoa Heads Tricity - Design PatternsMaciej Burda
 
Developing iOS REST Applications
Developing iOS REST ApplicationsDeveloping iOS REST Applications
Developing iOS REST Applicationslmrei
 
Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2Filippo Matteo Riggio
 
Synchronizing without internet - Multipeer Connectivity (iOS)
Synchronizing without internet - Multipeer Connectivity (iOS)Synchronizing without internet - Multipeer Connectivity (iOS)
Synchronizing without internet - Multipeer Connectivity (iOS)Jorge Maroto
 
iPhone/iPad开发讲座 第五讲 定制视图和多点触摸
iPhone/iPad开发讲座 第五讲 定制视图和多点触摸iPhone/iPad开发讲座 第五讲 定制视图和多点触摸
iPhone/iPad开发讲座 第五讲 定制视图和多点触摸Hao Peiqiang
 
Creating an Uber Clone - Part XXIV - Transcript.pdf
Creating an Uber Clone - Part XXIV - Transcript.pdfCreating an Uber Clone - Part XXIV - Transcript.pdf
Creating an Uber Clone - Part XXIV - Transcript.pdfShaiAlmog1
 

Similar to I phone勉強会 (2011.11.23) (20)

UIWebView Tips
UIWebView TipsUIWebView Tips
UIWebView Tips
 
Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4Desenvolvimento iOS - Aula 4
Desenvolvimento iOS - Aula 4
 
iOS 7 SDK特訓班
iOS 7 SDK特訓班iOS 7 SDK特訓班
iOS 7 SDK特訓班
 
GCD in Action
GCD in ActionGCD in Action
GCD in Action
 
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефонаКурсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
Курсы по мобильной разработке под iOS. 4 лекция. Возможности телефона
 
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)
 
Webエンジニアから見たiOS5
Webエンジニアから見たiOS5Webエンジニアから見たiOS5
Webエンジニアから見たiOS5
 
PhotoFlipCardView
PhotoFlipCardViewPhotoFlipCardView
PhotoFlipCardView
 
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
 
Leaving Interface Builder Behind
Leaving Interface Builder BehindLeaving Interface Builder Behind
Leaving Interface Builder Behind
 
Intro to HTML5
Intro to HTML5Intro to HTML5
Intro to HTML5
 
UIViewControllerのコーナーケース
UIViewControllerのコーナーケースUIViewControllerのコーナーケース
UIViewControllerのコーナーケース
 
Android workshop
Android workshopAndroid workshop
Android workshop
 
Cocoa Heads Tricity - Design Patterns
Cocoa Heads Tricity - Design PatternsCocoa Heads Tricity - Design Patterns
Cocoa Heads Tricity - Design Patterns
 
Developing iOS REST Applications
Developing iOS REST ApplicationsDeveloping iOS REST Applications
Developing iOS REST Applications
 
CakePHP in iPhone App
CakePHP in iPhone AppCakePHP in iPhone App
CakePHP in iPhone App
 
Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2
 
Synchronizing without internet - Multipeer Connectivity (iOS)
Synchronizing without internet - Multipeer Connectivity (iOS)Synchronizing without internet - Multipeer Connectivity (iOS)
Synchronizing without internet - Multipeer Connectivity (iOS)
 
iPhone/iPad开发讲座 第五讲 定制视图和多点触摸
iPhone/iPad开发讲座 第五讲 定制视图和多点触摸iPhone/iPad开发讲座 第五讲 定制视图和多点触摸
iPhone/iPad开发讲座 第五讲 定制视图和多点触摸
 
Creating an Uber Clone - Part XXIV - Transcript.pdf
Creating an Uber Clone - Part XXIV - Transcript.pdfCreating an Uber Clone - Part XXIV - Transcript.pdf
Creating an Uber Clone - Part XXIV - Transcript.pdf
 

Recently uploaded

National Institute of Standards and Technology (NIST) Cybersecurity Framework...
National Institute of Standards and Technology (NIST) Cybersecurity Framework...National Institute of Standards and Technology (NIST) Cybersecurity Framework...
National Institute of Standards and Technology (NIST) Cybersecurity Framework...MichaelBenis1
 
ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...
ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...
ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...Neo4j
 
Centralized TLS Certificates Management Using Vault PKI + Cert-Manager
Centralized TLS Certificates Management Using Vault PKI + Cert-ManagerCentralized TLS Certificates Management Using Vault PKI + Cert-Manager
Centralized TLS Certificates Management Using Vault PKI + Cert-ManagerSaiLinnThu2
 
IT Nation Evolve event 2024 - Quarter 1
IT Nation Evolve event 2024  - Quarter 1IT Nation Evolve event 2024  - Quarter 1
IT Nation Evolve event 2024 - Quarter 1Inbay UK
 
HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...
HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...
HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...htrindia
 
Confoo 2024 Gettings started with OpenAI and data science
Confoo 2024 Gettings started with OpenAI and data scienceConfoo 2024 Gettings started with OpenAI and data science
Confoo 2024 Gettings started with OpenAI and data scienceSusan Ibach
 
TrustArc Webinar - TrustArc's Latest AI Innovations
TrustArc Webinar - TrustArc's Latest AI InnovationsTrustArc Webinar - TrustArc's Latest AI Innovations
TrustArc Webinar - TrustArc's Latest AI InnovationsTrustArc
 
Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...
Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...
Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...UiPathCommunity
 
Launching New Products In Companies Where It Matters Most by Product Director...
Launching New Products In Companies Where It Matters Most by Product Director...Launching New Products In Companies Where It Matters Most by Product Director...
Launching New Products In Companies Where It Matters Most by Product Director...Product School
 
Building Bridges: Merging RPA Processes, UiPath Apps, and Data Service to bu...
Building Bridges:  Merging RPA Processes, UiPath Apps, and Data Service to bu...Building Bridges:  Merging RPA Processes, UiPath Apps, and Data Service to bu...
Building Bridges: Merging RPA Processes, UiPath Apps, and Data Service to bu...DianaGray10
 
Unleash the Solace Pub Sub connector | Banaglore MuleSoft Meetup #31
Unleash the Solace Pub Sub connector | Banaglore MuleSoft Meetup #31Unleash the Solace Pub Sub connector | Banaglore MuleSoft Meetup #31
Unleash the Solace Pub Sub connector | Banaglore MuleSoft Meetup #31shyamraj55
 
Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...
Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...
Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...Product School
 
How AI and ChatGPT are changing cybersecurity forever.pptx
How AI and ChatGPT are changing cybersecurity forever.pptxHow AI and ChatGPT are changing cybersecurity forever.pptx
How AI and ChatGPT are changing cybersecurity forever.pptxInfosec
 
Enterprise Architecture As Strategy - Book Review
Enterprise Architecture As Strategy - Book ReviewEnterprise Architecture As Strategy - Book Review
Enterprise Architecture As Strategy - Book ReviewAshraf Fouad
 
Artificial Intelligence, Design, and More-than-Human Justice
Artificial Intelligence, Design, and More-than-Human JusticeArtificial Intelligence, Design, and More-than-Human Justice
Artificial Intelligence, Design, and More-than-Human JusticeJosh Gellers
 
PrismCRM-RealEstate-SalesCRM_byCode5Company
PrismCRM-RealEstate-SalesCRM_byCode5CompanyPrismCRM-RealEstate-SalesCRM_byCode5Company
PrismCRM-RealEstate-SalesCRM_byCode5CompanyMustafa Kuğu
 
VM Migration from VMware to CloudStack and KVM – Suresh Anaparti, ShapeBlue
VM Migration from VMware to CloudStack and KVM – Suresh Anaparti, ShapeBlueVM Migration from VMware to CloudStack and KVM – Suresh Anaparti, ShapeBlue
VM Migration from VMware to CloudStack and KVM – Suresh Anaparti, ShapeBlueShapeBlue
 
Trending now: Book subjects on the move in the Canadian market - Tech Forum 2024
Trending now: Book subjects on the move in the Canadian market - Tech Forum 2024Trending now: Book subjects on the move in the Canadian market - Tech Forum 2024
Trending now: Book subjects on the move in the Canadian market - Tech Forum 2024BookNet Canada
 
New ThousandEyes Product Features and Release Highlights: February 2024
New ThousandEyes Product Features and Release Highlights: February 2024New ThousandEyes Product Features and Release Highlights: February 2024
New ThousandEyes Product Features and Release Highlights: February 2024ThousandEyes
 

Recently uploaded (20)

National Institute of Standards and Technology (NIST) Cybersecurity Framework...
National Institute of Standards and Technology (NIST) Cybersecurity Framework...National Institute of Standards and Technology (NIST) Cybersecurity Framework...
National Institute of Standards and Technology (NIST) Cybersecurity Framework...
 
ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...
ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...
ASTRAZENECA. Knowledge Graphs Powering a Fast-moving Global Life Sciences Org...
 
Centralized TLS Certificates Management Using Vault PKI + Cert-Manager
Centralized TLS Certificates Management Using Vault PKI + Cert-ManagerCentralized TLS Certificates Management Using Vault PKI + Cert-Manager
Centralized TLS Certificates Management Using Vault PKI + Cert-Manager
 
IT Nation Evolve event 2024 - Quarter 1
IT Nation Evolve event 2024  - Quarter 1IT Nation Evolve event 2024  - Quarter 1
IT Nation Evolve event 2024 - Quarter 1
 
HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...
HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...
HBR SERIES METAL HOUSED RESISTORS POWER ELECTRICAL ABSORBS HIGH CURRENT DURIN...
 
Confoo 2024 Gettings started with OpenAI and data science
Confoo 2024 Gettings started with OpenAI and data scienceConfoo 2024 Gettings started with OpenAI and data science
Confoo 2024 Gettings started with OpenAI and data science
 
In sharing we trust. Taking advantage of a diverse consortium to build a tran...
In sharing we trust. Taking advantage of a diverse consortium to build a tran...In sharing we trust. Taking advantage of a diverse consortium to build a tran...
In sharing we trust. Taking advantage of a diverse consortium to build a tran...
 
TrustArc Webinar - TrustArc's Latest AI Innovations
TrustArc Webinar - TrustArc's Latest AI InnovationsTrustArc Webinar - TrustArc's Latest AI Innovations
TrustArc Webinar - TrustArc's Latest AI Innovations
 
Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...
Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...
Dev Dives: Leverage APIs and Gen AI to power automations for RPA and software...
 
Launching New Products In Companies Where It Matters Most by Product Director...
Launching New Products In Companies Where It Matters Most by Product Director...Launching New Products In Companies Where It Matters Most by Product Director...
Launching New Products In Companies Where It Matters Most by Product Director...
 
Building Bridges: Merging RPA Processes, UiPath Apps, and Data Service to bu...
Building Bridges:  Merging RPA Processes, UiPath Apps, and Data Service to bu...Building Bridges:  Merging RPA Processes, UiPath Apps, and Data Service to bu...
Building Bridges: Merging RPA Processes, UiPath Apps, and Data Service to bu...
 
Unleash the Solace Pub Sub connector | Banaglore MuleSoft Meetup #31
Unleash the Solace Pub Sub connector | Banaglore MuleSoft Meetup #31Unleash the Solace Pub Sub connector | Banaglore MuleSoft Meetup #31
Unleash the Solace Pub Sub connector | Banaglore MuleSoft Meetup #31
 
Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...
Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...
Cultivating Entrepreneurial Mindset in Product Management: Strategies for Suc...
 
How AI and ChatGPT are changing cybersecurity forever.pptx
How AI and ChatGPT are changing cybersecurity forever.pptxHow AI and ChatGPT are changing cybersecurity forever.pptx
How AI and ChatGPT are changing cybersecurity forever.pptx
 
Enterprise Architecture As Strategy - Book Review
Enterprise Architecture As Strategy - Book ReviewEnterprise Architecture As Strategy - Book Review
Enterprise Architecture As Strategy - Book Review
 
Artificial Intelligence, Design, and More-than-Human Justice
Artificial Intelligence, Design, and More-than-Human JusticeArtificial Intelligence, Design, and More-than-Human Justice
Artificial Intelligence, Design, and More-than-Human Justice
 
PrismCRM-RealEstate-SalesCRM_byCode5Company
PrismCRM-RealEstate-SalesCRM_byCode5CompanyPrismCRM-RealEstate-SalesCRM_byCode5Company
PrismCRM-RealEstate-SalesCRM_byCode5Company
 
VM Migration from VMware to CloudStack and KVM – Suresh Anaparti, ShapeBlue
VM Migration from VMware to CloudStack and KVM – Suresh Anaparti, ShapeBlueVM Migration from VMware to CloudStack and KVM – Suresh Anaparti, ShapeBlue
VM Migration from VMware to CloudStack and KVM – Suresh Anaparti, ShapeBlue
 
Trending now: Book subjects on the move in the Canadian market - Tech Forum 2024
Trending now: Book subjects on the move in the Canadian market - Tech Forum 2024Trending now: Book subjects on the move in the Canadian market - Tech Forum 2024
Trending now: Book subjects on the move in the Canadian market - Tech Forum 2024
 
New ThousandEyes Product Features and Release Highlights: February 2024
New ThousandEyes Product Features and Release Highlights: February 2024New ThousandEyes Product Features and Release Highlights: February 2024
New ThousandEyes Product Features and Release Highlights: February 2024
 

I phone勉強会 (2011.11.23)

  • 3. iPhone SDK • touch • on the WEB •LDR touch • • •i-Radio •LCD Clock • •Subway Map • •MyWebClip • •
  • 4. iPhone SDK http://github.com/kishikawakatsumi •hatena-touch •DescriptionBuilder •ldr-touch •TiledLayerView •tv-listings •UICCalendarPicker •MapKit-Route-Directions •FlipCardNavigationView •PhotoFlipCardView
  • 11. iPhone SDK #import <UIKit/UIKit.h> extern NSString * const FFNavigationBarSwipedNotification; @interface FFNavigationBar : UINavigationBar @end
  • 12. #import "FFNavigationBar.h" @implementation FFNavigationBar iPhone SDK - (void)initCommon { self.barStyle = UIBarStyleBlack; } - (id)init { self = [super init]; if (self) { [self initCommon]; } return self; } - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self initCommon]; } return self; }
  • 13. - (id)initWithCoder:(NSCoder *)coder { self = [super initWithCoder:coder]; iPhone SDK if (self) { [self initCommon]; } return self; } - (void)drawRect:(CGRect)rect { [background drawAsPatternInRect:rect]; } @end
  • 24. iPhone SDK UIImage draw~ PNG http://sonson.jp/?p=745 PNG => UI => =>JPEG
  • 25. iPhone SDK CALayer *backgroundImageLayer = [CALayer layer]; backgroundImageLayer.frame = CGRectMake(17.0f, 12.0f, 285.0f, 310.0f); backgroundImageLayer.contents = (id)[[UIImage imageNamed:@"photo_bg.png"] CGImage]; [self.contentView.layer addSublayer:backgroundImageLayer]; photoImageView = [[UIImageView alloc] initWithFrame:CGRectMake(30.0f, 18.0f, 260.0f, 260.0f)]; photoImageView.backgroundColor = [UIColor clearColor]; [self.contentView addSubview:photoImageView]; [photoImageView release];
  • 26. iPhone SDK preloaderBackground = [[UIImageView alloc] initWithFrame:CGRectMake(95.0f, 95.0f, 70.0f, 70.0f)]; preloaderBackground.backgroundColor = [UIColor clearColor]; preloaderBackground.image = [UIImage imageNamed:@"photo_preloader.png"]; [photoImageView addSubview:preloaderBackground]; [preloaderBackground release]; preloader = [[FFPreloaderView alloc] initWithFrame:CGRectMake(5.0f, 1.0f, 60.0f, 20.0f)]; [preloaderBackground addSubview:preloader]; [preloader release];
  • 27. iPhone SDK CALayer *shadowLayer = [CALayer layer]; shadowLayer.frame = CGRectMake(30.0f, 18.0f, 260.0f, 260.0f); shadowLayer.contents = (id)[[UIImage imageNamed:@"photo_shadow.png"] CGImage]; [cellContentView.layer addSublayer:shadowLayer]; favoriteButton = [[FFFavoriteButton alloc] initWithFrame:CGRectMake(19.0f, 24.0f, 75.0f, 29.0f)]; favoriteButton.exclusiveTouch = YES;
  • 29. iPhone SDK NSCache NSDictionary
  • 30. @interface FFImageCache : NSObject { NSFileManager *fileManager; iPhone SDK NSString *cacheDirectory; NSCache *cache; } + (FFImageCache *)sharedInstance; - (UIImage *)cachedImageWithURL:(NSString *)URL; - (UIImage *)cachedImageWithURL:(NSString *)URL defaultImage:(UIImage *)defaultImage; - (UIImage *)cachedImageWithURL:(NSString *)URL size:(NSInteger)size; - (UIImage *)cachedImageWithURL:(NSString *)URL size:(NSInteger)size defaultImage:(UIImage *)defaultImage; - (void)storeImage:(UIImage *)image data:(NSData *)data URL:(NSString *)URL; - (void)purgeMemoryCache; - (void)deleteAllCacheFiles; @end
  • 32. - (UIImage *)cachedImageWithURL:(NSString *)URL defaultImage:(UIImage *)defaultImage { iPhone SDK NSString *key = [FFImageCache keyForURL:URL]; UIImage *cachedImage = [cache objectForKey:key]; if (cachedImage) { return cachedImage; } cachedImage = [UIImage imageWithContentsOfFile:[self pathForKey:key]]; if (cachedImage) { [cache setObject:cachedImage forKey:key]; } return cachedImage; } - (void)storeImage:(UIImage *)image data:(NSData *)data URL:(NSString *)URL { NSString *key = [FFImageCache keyForURL:URL]; [cache setObject:image forKey:key]; [data writeToFile:[self pathForKey:key] atomically:NO]; }
  • 33. + (NSString *)keyForURL:(NSString *)URL { ! if ([URL length] == 0) { ! ! ! } iPhone SDK return nil; ! const char *cStr = [URL UTF8String]; ! unsigned char result[16]; ! CC_MD5(cStr, (CC_LONG)strlen(cStr), result); ! return [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7],result[8], result[9], result[10], result[11],result[12], result[13], result[14], result[15]]; ! }
  • 36. - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { iPhone SDK if (!scrollView.isDecelerating) { contentOffsetY = scrollView.contentOffset.y; } } - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { shouldSnapScroll = scrollView.isTracking && scrollView.isDragging && ! scrollView.isDecelerating; if (!decelerate) { [self loadImagesForOnscreenRows]; } }
  • 37. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { [self loadImagesForOnscreenRows]; iPhone SDK CGFloat distance = ABS(distance = contentOffsetY - scrollView.contentOffset.y); if (distance > timelineView.frame.size.height * 2) { shouldSnapScroll = YES; } if (!shouldSnapScroll) { return; } NSArray *indexPaths = timelineView.indexPathsForVisibleRows; if ([indexPaths count] == 0) { return; } if (contentOffsetY > scrollView.contentOffset.y) { scrollDirection = ScrollDirectionUp; } else { scrollDirection = ScrollDirectionDown; }
  • 38. CGFloat delta; NSIndexPath *indexPath; if (scrollDirection == ScrollDirectionUp) { iPhone SDK indexPath = [indexPaths objectAtIndex:0]; CGRect rect = [timelineView rectForSection:indexPath.section]; delta = scrollView.contentOffset.y - rect.origin.y; if (delta > 250.0f) { indexPath = [indexPaths lastObject]; rect = [timelineView rectForSection:indexPath.section]; delta = rect.origin.y - scrollView.contentOffset.y; if (delta < 0.0f) { return; } } } else { indexPath = [indexPaths lastObject]; CGRect rect = [timelineView rectForSection:indexPath.section]; delta = rect.origin.y - scrollView.contentOffset.y; if (indexPath.section == [timelineManager count] - 1) { return; } if (delta < 0.0f) { return; } if (delta > 200.0f) { indexPath = [indexPaths objectAtIndex:0]; } } if (scrollView.contentInset.top < 60.0f && scrollView.contentOffset.y > 0.0f) { NSIndexPath *toIndexPath = [NSIndexPath indexPathForRow:0 inSection:indexPath.section]; [timelineView scrollToRowAtIndexPath:toIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; } }
  • 42. - (void)animateIcon:(BOOL)flag { [UIView transitionFromView:flag ? icon : selectedIcon iPhone SDK toView:flag ? selectedIcon : icon duration:0.4 options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews completion: ^(BOOL finished) { if (!animaitionFinished) { [self animateIcon:!flag]; } }]; } - (void)setEnabled:(BOOL)enabled { [super setEnabled:enabled]; if (enabled) { animaitionFinished = YES; } else { animaitionFinished = NO; shouldStartZoomAnimation = YES; [self animateIcon:self.selected]; } }
  • 43. - (void)setSelected:(BOOL)selected { [super setSelected:selected]; if (selected) { iPhone SDK icon.hidden = YES; selectedIcon.hidden = NO; animationIcon.image = [UIImage imageNamed:@"button_favorite_icon_selected.png"]; } else { icon.hidden = NO; selectedIcon.hidden = YES; animationIcon.image = [UIImage imageNamed:@"button_favorite_icon.png"]; } if (shouldStartZoomAnimation) { shouldStartZoomAnimation = NO; CABasicAnimation *zoom = [CABasicAnimation animationWithKeyPath:@"transform.scale"]; zoom.toValue = [NSNumber numberWithFloat:8.0f]; CABasicAnimation *fade = [CABasicAnimation animationWithKeyPath:@"opacity"]; fade.toValue = [NSNumber numberWithFloat:0.0f]; CAAnimationGroup *group = [CAAnimationGroup animation]; group.delegate = self; group.animations = [NSArray arrayWithObjects:zoom, fade, nil]; group.duration = 0.5; animationIcon.hidden = NO; [animationIcon.layer addAnimation:group forKey:nil]; } } - (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag { animationIcon.hidden = YES; }
  • 46. photoScrollView = [[UITableView alloc] initWithFrame:CGRectMake(6.0f, 30.0f, 50.0f, 264.0f)]; iPhone SDK photoScrollView.delegate = self; photoScrollView.dataSource = self; photoScrollView.rowHeight = 44.0f; photoScrollView.separatorColor = [UIColor clearColor]; photoScrollView.pagingEnabled = YES; photoScrollView.showsHorizontalScrollIndicator = NO; photoScrollView.showsVerticalScrollIndicator = NO; photoScrollView.backgroundColor = [UIColor clearColor]; photoScrollView.transform = CGAffineTransformMakeRotation(M_PI / -2.0f); photoScrollView.center = CGPointMake(146.0f, 56.0f); [cellContentView addSubview:photoScrollView]; [photoScrollView release]; pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(12.0f, 72.0f, 264.0f, 36.0f)]; pageControl.clipsToBounds = YES; pageControl.hidesForSinglePage = YES; pageControl.userInteractionEnabled = NO; [cellContentView addSubview:pageControl]; [pageControl release]; UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(scrollViewTapped:)]; [photoScrollView addGestureRecognizer:tapRecognizer]; [tapRecognizer release];
  • 47. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; iPhone SDK } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section { NSUInteger count = [photos count]; if (count == 0) { pageControl.numberOfPages = 0; } else { pageControl.numberOfPages = MIN(count / 6 + 1, 17) ; } pageControl.currentPage = 0; return count; }
  • 48. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { iPhone SDK NSUInteger count = [photos count]; NSUInteger numPages = count / 6 + 1; photoScrollView.contentSize = CGSizeMake(50.0f, 264.0f * numPages); static NSString *cellIdentifier = @"Cell"; FFMyPhotoImageCell *cell = (FFMyPhotoImageCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) { cell = [[[FFMyPhotoImageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]autorelease]; cell.selectionStyle = UITableViewCellSelectionStyleNone; } cell.URL = [[photos objectAtIndex:indexPath.row] objectForKey:FFURLKey]; return cell; }
  • 49. - (void)scrollViewDidScroll:(UIScrollView *)sender { if (pageControlUsed) { iPhone SDK return; } CGFloat pageWidth = photoScrollView.bounds.size.height; int page = floor((photoScrollView.contentOffset.y - pageWidth / 2) / pageWidth) + 1; ! currentPage = MIN(page, 16); } - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { pageControlUsed = NO; pageControl.currentPage = currentPage; } - (void)scrollViewTapped:(UIGestureRecognizer *)gestureRecognizer { UITableView *tableView = (UITableView *)self.superview; [tableView.delegate tableView:tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection: 0]]; }
  • 51. CGFloat x = 41.0f; CGSize size; iPhone SDK NSString *username = user.username; if ([username length] > 0) { UIFont *commentUsernameFont = [FFConstants commentUsernameFont]; size = [username sizeWithFont:commentUsernameFont forWidth:253.0f - x lineBreakMode:UILineBreakModeTailTruncation]; [username drawInRect:CGRectMake(x, 6.0f, size.width, 12.0f) withFont:commentUsernameFont lineBreakMode:UILineBreakModeTailTruncation alignment:UITextAlignmentLeft]; x += size.width; NSString *action = NSLocalizedString(@" faved.", nil); UIFont *commentFont = [FFConstants commentFont]; size = [action sizeWithFont:commentFont forWidth:253.0f - x lineBreakMode:UILineBreakModeClip]; [action drawInRect:CGRectMake(x, 6.0f, size.width, 12.0f) withFont:commentFont lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentLeft]; NSMutableString *str = [NSMutableString string]; NSUInteger index = 0; NSUInteger length = [action length];; for (; index < length; index++) { [str appendString:[action substringWithRange:NSMakeRange(index, 1)]]; CGSize sz = [str sizeWithFont:commentFont forWidth:253.0f - x lineBreakMode:UILineBreakModeClip]; if (sz.width >= size.width) { index++; break; } } action = [action substringWithRange:NSMakeRange(index, length - index)]; [action drawInRect:CGRectMake(41.0f, 22.0f, 212.0f, 12.0f) withFont:commentFont lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentLeft]; }

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n