先添加scrollView,進行約束數組
添加View 進行約束 相對於scrollView安全
若是水平滑動:設置vertically in Container 豎直方向滑動:Horizontally in Container網絡
將View的寬度以scroView爲基準 改變倍數多線程
在M_PI前面添加負號 可實現反方向轉async
[self.MusicImageView layoutIfNeeded]: 當須要改變layout的時候,調用oop
第一種旋轉: 比較麻煩 還得設置current值在不斷更新:atom
// 設置圖片爲圓形: // 修改layout前 先將masksToBounds設置爲YES [self.MusicImageView layoutIfNeeded]; self.imageDetail.layer.masksToBounds = YES; self.imageDetail.layer.cornerRadius = self.imageDetail.frame.size.width/2; [NSTimer scheduledTimerWithTimeInterval:0.01f target:self selector:@selector(rotateAction) userInfo:nil repeats:YES]; // 將定時器加到runloop中 [[NSRunLoop currentRunLoop] addTimer:time forMode:NSRunLoopCommonModes];
- (void)rotateAction { current += 0.001; CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI * current); self.imageDetail.transform = transform; }
第二種更新:不須要設置其餘變量實時更新spa
在block中:.net
runLoop:子線程中就關閉了線程
滑動頁面時不會由於優先級的問題 影響圖片轉動
- (void)play { [self.avPlayer play]; self.isPlay = YES; // 定時器使用方法: /* 每隔TimeInterval0.1秒調用這個方法 */ if (self.timer == nil) { self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(playTimer) userInfo:nil repeats:YES]; } // 將定時器加到runloop中 [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; }
block調用中:
self.MusicImageView.transform = CGAffineTransformRotate(self.MusicImageView.transform, M_PI / 180);
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(playTimer) userInfo:nil repeats:YES] :
每隔TimeInterval秒調用這個方法
定時器銷燬:
[self.timer invalidate];
安全寫法:
建立前判斷是否爲空
銷燬前判斷是否存在
// 建立 if (self.timer == nil) { self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(playTimer) userInfo:nil repeats:YES]; } // 銷燬 if (self.timer) { // 銷燬定時器 [self.timer invalidate]; // 手動置空: self.timer = nil; }
約束了scroll只能在豎直方向滑動 下面這個屬性爲YES時 scrollView在水平方向上也能夠滑動 只有改爲NO 才只能在豎直方向滑動
// 自動添加了上下64 設置爲NO 取消viewController自動調整 self.automaticallyAdjustsScrollViewInsets = NO;
在本類調用其餘類中的block,使用self不會形成循環引用
block聲明:
@property (copy,nonatomic) void (^block)(NSString *);
block實現:
實現的內容暫時不走 先把block實現的代碼塊存起來
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { TwoViewController *twoVC =(TwoViewController *) segue.destinationViewController; // block實現 twoVC.block = ^(NSString *str) { self.label.text = str; }; }
block調用:
當調用block的時候(安全寫法:調用前先判斷block是否存在):self.block(self.textField.text)---->開始執行上述存起來的block實現代碼塊 將調用傳進來的值賦給實現代碼
- (IBAction)popViewController:(UIButton *)sender { // block調用: if (self.block) { self.block(self.textField.text); } [self.navigationController popViewControllerAnimated:YES]; }
1> 設置pch文件 :Prefix Header
絕對路徑:拷貝到其餘電腦就很差用了 /Users/lanou3g/Documents/項目期/MusicTextOne/Class/Help/PrefixHeader.pch
相對路徑:$(SRCROOT)/Class/Help/PrefixHeader.pch
2> componentsSeparatedByString:根據某個字符串分割, 返回值是數組
+ (void)ResquestDataURL:(NSString *)URLStr block:(void(^)(NSArray *))block { // 子線程請求數據 dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSArray *array = [NSArray arrayWithContentsOfURL:[NSURL URLWithString:URLStr]];// 獲取數據 // 建立model數組 NSMutableArray *modelArray =[NSMutableArray array]; for (NSDictionary *dic in array) { MusicModel *model = [[MusicModel alloc] init]; [model setValuesForKeysWithDictionary:dic]; [RequestData musicModelRequest:model]; [modelArray addObject:model]; } // 主線程返回數據 dispatch_async(dispatch_get_main_queue(), ^{ // 在主線程返回數據 if (block) { NSLog(@"block = %@", block); block(modelArray); } }); }); // NSLog(@"哈哈哈哈哈哈"); }
UIStoryboard *storyB = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; ListenDetailViewController *DetailVC = [storyB instantiateViewControllerWithIdentifier:@"detail_id"];
這個點也很重要哦 ~
-(IBAction)button:(id)sender{ UIButton* button = (UIButton*)sender; UITableViewCell* buttonCell = (UITableViewCell*)[sender superview]; NSUInteger row = [[tableView indexPathForCell:buttonCell]row]; }
格式轉換部分的原博:http://blog.csdn.net/bailu66/article/details/7665357
(除格式轉換的其餘內容均爲本人所寫)
NSString 轉換成NSData 對象
NSData* xmlData = [@"testdata" dataUsingEncoding:NSUTF8StringEncoding];
NSData 轉換成NSString對象NSData * data;
NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSData *data;
char *test=[data bytes];
byte* tempData = malloc(sizeof(byte)*16);
NSData *content=[NSData dataWithBytes:tempData length:16];
哈哈哈