日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

摄影师张梦格App项目总结

發布時間:2025/7/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 摄影师张梦格App项目总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

? ? ?昨天張夢格App的第二版已經提交上線審核。從第一天接手項目開始到第一次、第二次被蘋果打回,再到第一版、第二版上線,我經歷了一個完整的App從開發到上線的全過程。我想應該對這個項目做一些總結,把自己在這個項目中的收獲記錄下來。幫助加深記憶,鞏固和提高技術

?

一、代碼管理工具----分布式版本控制系統github,在上邊新建一個項目的代碼倉庫,把代碼同步到git服務器上。下邊介紹一個常用的git終端命令:

? ? ? ?git clone "SSH網址"從github上克隆代碼到本地、

? ? ? ?git branch 列出已有的分支、

? ? ? ?git checkout "branchname" 切換分支名稱、

? ? ? ?git add . ?添加新文件或者更改新文件、

? ? ? ?git status 查看更新狀態、

? ? ? ?git rm "文件名" 刪除github上文件、

? ? ? ?git commit -m "name"提交更改文件到本地并且添加一個名字、

? ? ? ?git pull /git pull origin "branchname"從服務器上拉取信息、

? ? ? ?git push origin "branchname"提交到服務器上、

? ? ? ?git merge 合并版本、

? ? ? ?git log查看提交修改目錄。

? ? ? ?gitk 打開github自帶圖形用戶界面

? ? ? ?mate "Zhangmengge.xcodeproj" 用textmate打開工程文件

?

二、iphone工程命名規范:

? ? ??

進入工程后有四個文件夾:

第一個Resources存放的是第一次美工給的圖片,包含測試圖和坐標圖并不是最終要添加到工程里的文件。

第二個是工程名字的文件夾。

第三個Frameworks里存放了工程所有用到的框架。

第四個是這個工程的app文件。

? ? ??

在工程名的文件夾里包含有5個文件夾:

第一個config是一個全局的配置文件,里邊主要放所有用到的宏定義。

第二個App文件夾里放的是所有的代碼文件。

第三個libs文件夾里放所有用到的第三方框架。

第四個Resources里邊存放的是工程中所有用到的圖片素材。

第五個supporting files是一個支持文件,里邊主要是自動生成文件,例如plist文件、main函數、pch文件,在pch文件里寫的主要是一些被很多頁面都要引用的框架名稱,寫在這里邊就會自動引用到所有頁面。?

?

三、 ?自定義Button形狀的第三方框架OBShapedButton:

圖片素材的其它區域要給成透明的,然后用OBShapedButton初始化創建一個對象,后邊用法跟創建系統Button一樣:

OBShapedButton * sharebtn = [OBShapedButton buttonWithType:UIButtonTypeCustom];sharebtn.frame = CGRectMake(10, 40, 300, 436);[sharebtn setImage:[UIImage imageNamed:@"xiepinglun_backgound_cut.png"] forState:UIControlStateNormal];[sharebtn addTarget:self action:@selector(onTop) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:sharebtn];

?

四、textview、textfield回收鍵盤方法:

都需要把delegate設成自己:

-(BOOL)textFieldShouldReturn:(UITextField *)textField {[textField resignFirstResponder];return YES; }-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if ([text isEqualToString:@"\n"]) { [textView resignFirstResponder]; return NO; } return YES; }

?

五、字符串替換、數組反向排序:

//字符串替換 self.finalStr = [self.tempStr stringByReplacingOccurrencesOfString:@"</p>" withString:@" "]; //將數組元素反向排列 [self.articleList reverseObjectEnumerator];

?

六、修改編譯文件(Build)位置:

編寫程序時經常會出現一些莫名其妙的錯誤,而且怎么找都找不到錯誤,這個時候就該考慮一下是不是build的問題,需要clean build一下。在xcode里Preferences里的Locations把Derived Data的Default改成Relative,然后把后邊括號里改成build,這樣每次編譯會在你的工程目錄里多出一個build文件夾,在出現奇怪錯誤時可以build目錄清理一下。

? ? ??

?

七、DLog:

編寫程序時經常需要用NSLog輸出一些數據,當整個程序寫完時可能已經寫了無數個NSLog,不可能一個一個刪了,而且日后如果修改還需要在寫非常麻煩。解決辦法在.pch里寫這樣一段宏命令

//把NSLog換成DLog,以后就不用一個一個刪除 #ifdef DEBUG # define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); #else # define DLog(...) #endif// ALog always displays output regardless of the DEBUG setting #define ALog(fmt, ...) NSLog((@"%s [line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

然后在程序中需要用NSLog的地方全部換成DLog。編寫程序時把Edit SchemeL里Build Configuration選項改成Debug(默認就是Debug),程序會正常輸出打印。當上線發布時把Debug改成Release,所以DLog就不會打印輸出了。

? ? ??

?

八、如何判斷設備是iphone5:

在.pch里添加一段宏命令

//判斷設備是不是iphone5 #define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

在程序中只需判斷:

if (iPhone5) {// Initialization code ...}

?

九、去掉cell選中時的藍色背景:

在cellForRowAtIndexPath里加上一句話:

static NSString *CellIdentifier = @"Cell";MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];// Configure the cell...if (cell == nil) {cell = [[[MyCustomCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]autorelease];}//設置選中后cell的背景顏色,有黑色,灰色,藍色,和不顯示顏色四種cell.selectionStyle = UITableViewCellAccessoryNone;

?

十、如何判斷程序第一次進入:

在AppDelegate里開始位置寫

//判斷程序是否第一次進入if (![[NSUserDefaults standardUserDefaults]boolForKey:@"everLaunched"]) {[[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"everLaunched"];[[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"firstLaunch"];}else{[[NSUserDefaults standardUserDefaults]setBool:NO forKey:@"firstLaunch"];}// Save changes to disk[[NSUserDefaults standardUserDefaults] synchronize];

在需要對第一次進行操作時寫:

-(void)firstLaunch {if ([[NSUserDefaults standardUserDefaults]boolForKey:@"firstLaunch"]){// Initialization code}else{// Initialization code } }

?

十一、IOS的沙盒機制:

IOS為每個應用程序都創建了一個文件系統,每個應用程序只能讀取這個文件系統中的文件,不能訪問其他程序的文件系統。此區域就被稱為沙盒,所有的非代碼文件都保存在這里。例如圖像、聲音、屬性列表、本地文件等。有兩點需要注意:

1.每個應用程序都有屬于自己的儲存空間。

2.每個應用程序只能訪問自己的空間,不能訪問其他程序的儲存空間。

每臺MAC電腦的用戶名文件夾下都有一個默認隱藏的文件夾,叫資源庫:

1.顯示資源庫的終端命令:chflags nohidden ~/Library/

2.隱藏資源庫的終端命令:chflags hidden ~/Library/

顯示Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true

隱藏Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false

怎樣找到應用程序的沙河路徑:

每個沙盒中都有3個文件夾:1.Documents 2.Library 3.tmp

? ? ?

Documents:程序中建立的或在程序中瀏覽到的文件數據保存在該目錄下,iTunes備份和恢復的時候會包括此目錄

Library:存儲程序的默認設置或其它狀態信息;

Library/Caches:存放緩存文件,iTunes不會備份此目錄,此目錄下文件不會在應用退出刪除

tmp:提供一個即時創建臨時文件的地方。

itunes在與iphone同步時,備份所有的Documents和Library文件。

iphone在重啟時,會丟棄所有的tmp文件。

?

十二、程序多語言支持或者經常程序會丟失Info.Plist.String(Chinese):

在工程里PROJECT------Localizations下邊有個加號,點擊一下就會出來很多國家的plist.string文件

?

?

十三、檢測網路:

用第三方框架NetworkChecker來判斷,代碼如下,首先引入頭文件

#import "NetworkChecker.h"?

然后在.h里定義一個實例方法

-(BOOL)checkNetwork;

在.m文件中寫

- (BOOL)checkNetwork {NetworkChecker *networkchecker = [NetworkChecker sharedNetworkChecker];if ([networkchecker networkStatus] == NotReachable) {return NO;//返回NO是沒網狀態} else {return YES;//返回YES是有網狀態 } }

寫完后當要用到判斷網絡的地方,這樣寫

if (![self checkNetwork]) {//當沒有網絡時執行的方法 }else{//有網情況下執行方法 }

?

十四、用Blocks寫網絡請求:

NSString * str = [NSString stringWithFormat:@"http://star.eliteworkltd.com:8002/?json=1&p=1413"];NSURL * url = [NSURL URLWithString:str];//__block的作用是能在setCompletionBlock的內部訪問外部的方法__block ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];[request setRequestMethod:@"GET"];[request setCompletionBlock:^{//相當于ASi的RequestFinished方法 }];[request setFailedBlock:^{//相當于ASI的RequestFailed方法 UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"" message:@"非常抱歉" delegate:nil cancelButtonTitle:@"您的網絡不給力(︶︿︶)。。。" otherButtonTitles:nil, nil];[alert show];[alert release];}];//啟動異步執行[request startAsynchronous];

?

十五、SDWebImage:

跟以前的AsycImage用法有些相似,只用給一個圖片的url地址即可,sdweb會自動幫你讀出圖片并且緩存,sdweb和Asy不同之處是sdweb需要給一張占位圖,在圖片沒加載出來之前會先顯示這張占位圖。sdweb里邊有個UIImageView+WebCache類,它是一個繼承imageview的類目,在.m文件中引入頭文件

#import "UIImageView+WebCache.h"

用法

[cell.imageview2 setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:@"57.png"]];

?

十六、截取當前頁面到相冊:

需要添加QuartzCore.framework框架,并且引入頭文件

#import <QuartzCore/QuartzCore.h> //保存圖片到相冊UIGraphicsBeginImageContext(self.view.bounds.size);//當前視圖 [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];UIImage * viewImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"" message:@"圖片已經為您保存到相冊" delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];[alert show];[alert release];

?

十七、在程序內發郵件:

在程序內發送Email,需要添加MessageUI.framework框架,import頭文件,加MFMailComposeViewControllerDelegate代理

#import <MessageUI/MFMailComposeViewController.h>@interface DetailViewController : UIViewController<MFMailComposeViewControllerDelegate> {}@end

然后調用方法:

//激活郵件功能 [self sendMailInApp];

然后在下邊寫sendMailInApp方法

#pragma mark ------- Send Email-(void)sendMailInApp {Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));if (mailClass != nil){if ([mailClass canSendMail]) {[self displayComposerSheet];}else {[self launchMailAppOnDevice];}}else {[self launchMailAppOnDevice];} }-(void)displayComposerSheet {MFMailComposeViewController * mailPicker = [[[MFMailComposeViewController alloc]init] autorelease];mailPicker.mailComposeDelegate = self;//設置主題[mailPicker setSubject:[NSString stringWithFormat:@"%@%@%@%@",@"分享自張夢格APP",@"",self.titleString,@""]];//添加發送者NSArray * toRecipients = [NSArray arrayWithObject:@"first@example.com"];[mailPicker setToRecipients:toRecipients];/*//email正文里添加圖片UIImage * addPic = [UIImage imageNamed:@"123.jpg"];NSData * imageData = UIImagePNGRepresentation(addPic);[mailPicker addAttachmentData:imageData mimeType:@"" fileName:@"123.jpg"];*/NSString * emailBody = nil;[mailPicker setMessageBody:emailBody isHTML:YES];[self presentModalViewController:mailPicker animated:YES]; }-(void)launchMailAppOnDevice {NSString * recipients = @"mailto:first@example.com&subject=my email!";NSString * body = @"&body=email body!";NSString * email = [NSString stringWithFormat:@"%@%@",recipients,body];email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];[[UIApplication sharedApplication]openURL:[NSURL URLWithString:email]];}-(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {NSString * message;switch (result) {case MFMailComposeResultCancelled://用戶取消編輯郵件message = @"郵件發送取消";break;case MFMailComposeResultSaved: //用戶成功保存郵件message = @"郵件保存成功";break;case MFMailComposeResultSent: //用戶點擊發送,將郵件放到隊列中message = @"郵件發送成功";break;case MFMailComposeResultFailed: //用戶試圖保存或者發送郵件失敗message = @"郵件發送失敗";break;default:break;}DLog(@"%@", message);[self dismissModalViewControllerAnimated:YES]; }?

?

十八、iphone開發的一些總結(原文出自編程神人老莫):

1.Done is better than perfect(尤其是程序第一次提交,不要想著把東西做的多好多炫多么天花亂墜之后在上線,一定要以一個簡單又能通過的方式先提交第一版,然后在做第二版更新);

2.優先、盡早的學習蘋果的新技術,因為你遲早都是要學的;

3.好的平面設計不等于好的iphone設計,web的一套設計在移動設備上并不適用;

4.選擇被證實的成功上線案列走,因為前人已經為你走過無數次的reject之路;

5.你的app要值得用戶反復去用,要區別于同類產品。

?

十九、最后總結幾點蘋果審核幾個要點(都是經過血淚的教訓才總結出來的經驗),不遵循這些規則你的應用很可能被打回:

1.我的應用第一次被打回來蘋果給了原因是服務器太慢,程序里的圖片出不來,后來換了服務器,并且在代碼上做了優化;第二次又被駁回,蘋果給你的原因是not very useful,Simply web sites bundled as apps,蘋果認為程序過于簡單,就跟一個web的應用一樣;don’t provide ?any lasting entertainment value(不能提供任何的持續的娛樂價值) ,后來把程序主題框架換成了Path菜單,又加入了用戶留言板功能才通過。

2.bug和崩潰:首先最重要一點提交的程序一定不能有bug和崩潰,如果有必定會被打回。

3.條款違規:不符合國家法律規定的,含有嚴重暴力色情內容的。

4.侵權:也就是說不要有侵權行為或者是竊取用戶隱私,被發現的化一定會被打回。?

5.功能描述與事實不符,軟件說明上吹的多牛X多牛叉,實際上根本就沒有 。

6.不能用蘋果私有的API

7.山寨:抄襲別人軟件創意,嚴重雷同

8.軟件功能不能影響蘋果自己的產品,搶蘋果生意的,最后都會被pass

?

?

?

?

?

?

?

?

轉載于:https://www.cnblogs.com/zhangmangyuan/archive/2013/01/23/zhangmengge.html

總結

以上是生活随笔為你收集整理的摄影师张梦格App项目总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产露出视频 | 五月天天 | 亚洲精品一区在线观看 | 欧美xxxx×黑人性爽 | 欧美专区在线 | 91成人精品视频 | 一久久久| 桃色一区二区 | 超碰天天干 | 四虎影院在线视频 | 中文精品无码中文字幕无码专区 | 欧美久久久久久又粗又大 | 在线观看a网站 | 亚洲午夜久久 | 成人动漫免费在线观看 | 久久无码人妻一区二区三区 | 免费一级毛片麻豆精品 | 中文无码一区二区三区在线观看 | 国产97色在线 | 日韩 | 午夜福利三级理论电影 | 欧美成人一区二区视频 | www.五月婷婷.com | 豆豆色成人网 | 久久精品亚洲精品国产欧美 | 中文字幕视频在线播放 | 午夜免费一级片 | 懂色av一区二区三区蜜臀 | 欧美丰满一区二区免费视频 | 欧洲亚洲视频 | 黄色av电影网址 | 美丽的姑娘在线观看 | 91亚洲国产成人精品性色 | 久久成人黄色 | 国产熟妇一区二区三区四区 | 最新激情网站 | 欧美专区亚洲专区 | 操操色| 欧美三级在线播放 | 夜夜草| 女仆裸体打屁屁羞羞免费 | 亚洲AV成人无码久久 | 无码精品人妻一区二区 | 国产又粗又黄又爽又硬的视频 | 男女啪啪软件 | 色乱码一区二区三在线看 | 日本女v片 | 午夜精品久久久久久久久久久久 | 免费国产羞羞网站视频 | 人人爽人人爽人人片 | 亚洲视频在线视频 | 黄色片视频免费观看 | 夫妻露脸自拍[30p] | 国产视频在线免费观看 | 成人二三区 | 已满十八岁免费观看全集动漫 | 日韩黄视频 | 中文字幕久久网 | 女女av在线 | 国产特级淫片免费看 | 国产在线最新 | 级毛片 | 亚洲熟女www一区二区三区 | 青青导航| 日韩欧美成人一区二区三区 | 亚洲精品在线观看视频 | 插插插操操操 | 久久综合综合久久 | √资源天堂中文在线视频 | 日韩精品无 | 播色网 | 欧美一级性片 | 久久综合丁香 | 黄色网址在线看 | 国产一区二区内射 | 欧美精品videos | 亚洲综合第一页 | 性久久久 | 操干网| 蜜桃啪啪 | 夜夜高潮夜夜爽 | 台湾av在线 | 日日摸天天添天天添破 | 桃花色综合影院 | 天天色天天射天天干 | 88久久精品无码一区二区毛片 | 成人av免费看 | 年下总裁被打光屁股sp | 欧美成人一二区 | 国产午夜一区 | 日韩精品伦理 | 人人av在线 | 91黄色免费网站 | 精品人妻人人做人人爽夜夜爽 | 激情福利社 | 国产一卡二卡三卡四卡 | 女人脱下裤子让男人桶 | 日韩精品中文字幕一区二区三区 | 亚洲AV无码成人精品区明星换面 | www三级免费 |