-(void)sizeToFit;
resize自己该贾,讓自己更貼近子視圖理澎,最大的節(jié)省空間,比如:我知道了label.text = @"aoegaieg"
,這里我可以調(diào)用[label sizeToFit]
;label
就會自己調(diào)整尺寸峦嗤,而不用我們自己來計算寬度和高度了凡壤;如果是想size自己到superView
(沒有嘗試曹体,大概是讓自己最大化填充superView),需要先將自己add到superView
除抛,然后再調(diào)用這個方法喘漏;
這個方法不能重寫,如果需要調(diào)整默認的size方式比吭,可以重寫sizeThatFits:
這個方法運行任何需要的計算,并返回給sizeToFit
;
UIPageViewController
一般是用來做電子書翻頁的效果的控制器;他實現(xiàn)的原理實際上是:一個fatherViewController
管理著下面的subViewControllers
鉴象;動畫效果有兩個,一個pageCurl
(這就是翻頁的效果)隔盛,一個是scroll
;
如何操作:
- (void)click:(id)btn{
//初始化一個pageVC
UIPageViewController *pageVC = [[UIPageViewController alloc]
initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:@{UIPageViewControllerOptionSpineLocationKey :
@(UIPageViewControllerSpineLocationMin),
UIPageViewControllerOptionInterPageSpacingKey : @(0)}];
pageVC.dataSource = self;
pageVC.delegate = self;
self.array = @[[[AViewController alloc] init], [[BViewController alloc] init], [[AViewController alloc] init], [[BViewController alloc] init]];
// 這里設(shè)置第一個顯示的vc,如果是'doubleSided'(雙面效果泥技,也就是正面為A店茶,背面為B) = 'YES' 并且spine location(暫時可以理解為書的背脊)不是'UIPageViewControllerSpineLocationMid',那么這里的array必須包含兩個元素族壳;
[pageVC setViewControllers:@[self.array[0]]
direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
[self.navigationController pushViewController:pageVC animated:YES];
}
//dataSoure協(xié)議中讓pageVC知道如何排序拢操;
- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController;
- (nullable UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController;
2516123-0963f996a37d64ce.png
CAEmitterLayer
粒子圖層,例如直播中不停冒泡的動畫就是這樣實現(xiàn)的
if (!_emitterLayer) {
CAEmitterLayer *emitterLayer = [CAEmitterLayer layer];
// 發(fā)射器在xy平面的中心位置
emitterLayer.emitterPosition = CGPointMake(self.moviePlayer.view.frame.size.width-50,self.moviePlayer.view.frame.size.height-50);
// 發(fā)射器的尺寸大小
emitterLayer.emitterSize = CGSizeMake(20, 20);
// 渲染模式
emitterLayer.renderMode = kCAEmitterLayerUnordered;
// 開啟三維效果
// _emitterLayer.preservesDepth = YES;
NSMutableArray *array = [NSMutableArray array];
// 創(chuàng)建粒子
for (int i = 0; i<10; i++) {
// 發(fā)射單元
CAEmitterCell *stepCell = [CAEmitterCell emitterCell];
// 粒子的創(chuàng)建速率吕漂,默認為1/s
stepCell.birthRate = 1;
// 粒子存活時間
stepCell.lifetime = arc4random_uniform(4) + 1;
// 粒子的生存時間容差
stepCell.lifetimeRange = 1.5;
// 顏色
// fire.color=[[UIColor colorWithRed:0.8 green:0.4 blue:0.2 alpha:0.1]CGColor];
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"good%d_30x30", i]];
// 粒子顯示的內(nèi)容
stepCell.contents = (id)[image CGImage];
// 粒子的名字
// [fire setName:@"step%d", i];
// 粒子的運動速度
stepCell.velocity = arc4random_uniform(100) + 100;
// 粒子速度的容差
stepCell.velocityRange = 80;
// 粒子在xy平面的發(fā)射角度
stepCell.emissionLongitude = M_PI+M_PI_2;;
// 粒子發(fā)射角度的容差
stepCell.emissionRange = M_PI_2/6;
// 縮放比例
stepCell.scale = 0.3;
[array addObject:stepCell];
}
emitterLayer.emitterCells = array;
[self.moviePlayer.view.layer insertSublayer:emitterLayer below:self.catEarView.layer];
_emitterLayer = emitterLayer;
}
return _emitterLayer;