關(guān)于view轉(zhuǎn)image其實(shí)挺簡單的
//將view轉(zhuǎn)換成image诈火,
- (UIImage *)setImageWithView:(UIView *)view{
UIGraphicsBeginImageContextWithOptions(view.frame.size, YES, 0.0); //圖形上下文設(shè)置
UIGraphicsBeginImageContext(view.frame.size); //開啟位圖
[view drawViewHierarchyInRect:view.frame afterScreenUpdates:YES];//在這里將view重寫進(jìn)上下文中
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();//賦值
UIGraphicsEndImageContext();//結(jié)束
return image;
}
可能很多人覺得view轉(zhuǎn)image有什么用啊
0.gif
我在寫倒計時的動畫,想做一個中間翻疊的動畫,看了很多代碼,發(fā)現(xiàn)了
view在翻轉(zhuǎn)的時候,只能根據(jù)一個點(diǎn)的位置進(jìn)行翻轉(zhuǎn),這樣就不能做出中間翻疊的效果,所有就只有把一個view變成2張image才能進(jìn)行下去,下面如何寫代碼有寫,自己看吧:
//將image分成2份
-(NSArray *)setImageArrWithImage:(UIImage *)image{
//創(chuàng)建2個位圖
CGImageRef newImageRef1 = CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0, 0, image.size.width, image.size.height/2.0));
CGImageRef newImageRef2 = CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0, image.size.height/2.0,image.size.width,image.size.height));
UIImage *image1 = [UIImage imageWithCGImage:newImageRef1];
UIImage *image2 = [UIImage imageWithCGImage:newImageRef2];
CGImageRelease(newImageRef1);
CGImageRelease(newImageRef2);
return @[image1,image2];
}
那如何進(jìn)行翻轉(zhuǎn)呢,那就更簡單了
[UIView animateWithDuration:2 animations:^{
CATransform3D transform = CATransform3DIdentity;
transform.m34 = -10 /1000;
CGFloat angle = - 100 / 360.0 * 2 * M_PI;;
view1.layer.transform = CATransform3DRotate(transform, angle, 1, 0, 0);
}];
寫的時候大家注意一下,我這里只翻轉(zhuǎn)了view1,view2跟view1合起來才是一個完整的view
在翻轉(zhuǎn)的時候默認(rèn)是根據(jù)view1的中心點(diǎn)來的這點(diǎn)就比較惡心了
這時候 我們要重設(shè)view1的中心點(diǎn),layer.anchorPoint 就是這惡心的屬性
開心.png
當(dāng)你設(shè)置之后如果發(fā)現(xiàn)視圖的位置不對了,你要重設(shè)frame的位置舔痕,至于為什么 我也不知道